我有同樣的問題。我已經使用正則表達式字符串搜索,所以我的解決方案是:
生成一個幫手集合。在這裏,我將所有相關的字符串,如:
{
search_field: email + " " + first_name + " " + last_name,
ref_id: (id to real object)
}
然後我用一個正則表達式來創造什麼,我允許尋找:
// logic found here: http://stackoverflow.com/questions/10870372/regex-match-if-string-contain-all-the-words-or-a-condition
var words = query.split(/[ ,]+/);
var regstr = "";
for (var i = 0; i < words.length; ++i) {
var word = words[i];
regstr += "(?=.*?\\b" + word + ")";
}
regstr += "^.*$";
regex = new RegExp(regstr, "i");
然後,這也給有關訂單有一定的靈活性。
搜索並不是最快的,因爲它仍然在所有元素上使用正則表達式,但它對我來說沒問題。 (我也指數search_field集合
獲得的結果也成爲一個嵌套調用,因爲首先你需要得到你真正想要的_ids,然後你就可以像這樣詢問他們:
connection.find({ "search_field" : regex }, { _id: 0, ref_id: 1 }, { limit: limit, skip: start }).toArray(function (err, docs) {
if (err) throw err;
// map array of documents into simple array of ids
var ids = [];
for (var i = 0; i < docs.length; ++i)
{
var doc = docs[i];
ids.push(doc.ref_id);
}
if (ids.length > 0)
MongooseEmails.find({ "_id": { $in: ids } }, function (err, docres) {
if (err) throw err;
res.send(JSON.stringify(docsres));
});
else
res.send("");
});
這是編輯代碼..也許有語法錯誤,一般來說,它是爲我工作。
非常簡潔的答案。什麼親。 –
@lan Mercer我的搜索工作適合多個領域,我只需要執行搜索組合的[fname + sname]字段,我是否需要爲這兩個字段創建索引以完成它?請簡要說明一下,任何示例? –
@AqibMumtaz請發表一個新的問題,舉例說明你正在做什麼 - 評論不是提出新問題的最佳地點。 –