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