2017-01-16 44 views
1

我正在用username搜索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({}); 
    } 
}); 

有人可以請求e幫我弄清楚上面有什麼問題?

當沒有searchValue時,它工作正常,所有用戶都返回。只要有任何搜索值,就根本沒有用戶返回。

我也直接嘗試在mongodb控制檯db.users.find({$text:{$search:"some_test"}})並且沒有收集對象返回。

+1

您的代碼似乎沒問題。我認爲這個問題是你的搜索值,Mongo搜索的單詞或短語不是字符 – Khang

+0

你試過在你的幫手外面移動你的sub: Template.template.onCreated(function(){ this.autorun(function(){ var searchValue = Session.get('searchVal'); Meteor.subscribe('Meteor.users.userSearch',searchValue); }) –

+0

@Khang ouuh是的,這是問題感謝您找出它!只要我寫下一個完整的用戶名,它就會彈出...你會知道一種按角色搜索的方法嗎? (我試圖做的是有一個動態搜索的'''searchVal'''''''''''''''更新!) – EugVal

回答

1

你不需要做全文搜索,如果你只是想(在這種情況下username)搜索只有一個字段的值。使用正則find命令與正則表達式值作爲搜索值在這種情況下更好:

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

ensureIndex: 自版本3.0.0推薦使用:db.collection.ensureIndex()現在是db.collection.createIndex()的別名。

_ensureIndex似乎是一個孤兒。

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