用户名全文搜索Meteor.users

时间:2017-01-16 07:31:52

标签: mongodb meteor full-text-search meteor-accounts

我正在尝试按用户名搜索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"}})中尝试过,并且没有返回任何集合对象。

2 个答案:

答案 0 :(得分:1)

如果您只想搜索一个字段的值(在这种情况下为username),则无需进行全文搜索。在这种情况下,使用正常find命令将Regex值作为搜索值更好:

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

答案 1 :(得分:0)

ensureIndex: 自3.0.0版以来已弃用 db.collection.ensureIndex()现在是 db.collection.createIndex()的别名。

_ensureIndex似乎是一个孤儿。

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