Meteor.users 中的用户名全文搜索

Username full text search in Meteor.users

我正在尝试通过用户名搜索 meteor.users 集合。

我已按照所有详细步骤进行操作 here,但似乎无法正常工作 meteor.users

这是我的代码:

服务器启动时:

Meteor.startup(function(){
  Meteor.users._ensureIndex({
    "username":"text",
  });
});

在我的发布函数中:

Meteor.publish("Meteor.users.userSearch",function(searchVal){

  if(!searchVal){
   return Meteor.users.find({});
  }

  return Meteor.users.find({$text:{$search:searchVal}});

});

在客户端:

Template.foo.helpers({
  users(){
    var searchValue = Session.get('searchVal');
    Meteor.subscribe('Meteor.users.userSearch',searchValue);
    return Meteor.users.find({});
  }
});

谁能帮我弄清楚上面的问题是什么?

没有searchValue时,正常工作,返回所有用户。只要有任何搜索值,就不会返回任何用户。

我也直接在 mongodb 控制台 db.users.find({$text:{$search:"some_test"}}) 中尝试过,同样没有返回任何集合对象。

确保指数: 自版本 3.0.0 起已弃用db.collection.ensureIndex() 现在是 db.collection.createIndex( ).

_ensureIndex 似乎是一个孤儿。

Meteor.startup(function(){
  Meteor.users.createIndex({
    "username":"text"
  });
});

如果您只想搜索一个字段的值(在本例中为 username),则无需进行全文搜索。在这种情况下,使用带有正则表达式值作为搜索值的普通 find 命令更好:

Meteor.users.find({
  username: new RegExp('user1', 'gi'),
});