你好我想做一個嵌套查詢,但我不知道如何去做。我想查看是否在搜索結果中出現姓氏或名字,然後看到從它返回的用戶是管道工。我被困在如何做一個嵌套查詢,我可以看到,如果第一個名稱是搜索名稱的子字符串或姓氏是搜索名稱的子字符串。任何幫助,將不勝感激。我已經使用Google搜索,但我找不到解決這個問題的方法MongoDB嵌套查詢
Meteor.user.find({$and:[{"profile.type": "plumber"}, ? ]})
你好我想做一個嵌套查詢,但我不知道如何去做。我想查看是否在搜索結果中出現姓氏或名字,然後看到從它返回的用戶是管道工。我被困在如何做一個嵌套查詢,我可以看到,如果第一個名稱是搜索名稱的子字符串或姓氏是搜索名稱的子字符串。任何幫助,將不勝感激。我已經使用Google搜索,但我找不到解決這個問題的方法MongoDB嵌套查詢
Meteor.user.find({$and:[{"profile.type": "plumber"}, ? ]})
謝謝你們所有幫助,但我有種做了這樣
t= Session.get("plumberSearchQuery").split(" ");
regexQueryString = ".*" +t[0];
for(var i = 1 ; i < t.length ; i++){
if (t[i]!= ""){
regexQueryString= regexQueryString+ "|"
regexQueryString =regexQueryString+ t[i];
}
}
regexQueryString = regexQueryString + "*."
return results.find({ $and:[{"profile.type": "plumber"},{$or: [{"profile.firstName": {$regex: new RegExp(regexQueryString, "i")}} , {"profile.lastName": {$regex: new RegExp(regexQueryString, "i")}}]}]});
我想你應該爲此使用聚合管道。你可以管一個$匹配這將檢查該過濾器「管道工」
你可以給我一個例子 – Gardezi
檢查mongodb文檔。搜索聚合管道和$匹配。 – Constantine
有一件事我想知道是否有一種方法來檢查一個字符串是否包含字段的值? – Gardezi
看到這樣的信息這是一個嘗試姓氏或名字,然後管其結果第二$匹配的輸出:
// search parameters
var search = 'son';
var type = 'plumber';
// regular expression based on the search with case ignored
var re = new RegExp(search, 'i');
// returns (type == 'plumber') AND
// (last contains 'son' OR first contains 'son')
var selector = {
$or: [{'profile.firstName': re}, {'profile.lastName': re}],
'profile.type': type
};
// fetch the users
var users = Meteor.users.find(selector).fetch();
您可能需要更改一些字段名稱,例如我不知道,如果你使用profile.firstName
VS profile.firstname
等
聚集可能是更好的,但這應該工作:
db.user.find({"profile.type": "plumber", $or:[{"profile.name":/james/},{"profile.surname":/james/}]})
所以,你有$或姓名,以及所有在一個與水管工大文件。/james /是正則表達式,請記住,您必須以某種方式處理大寫字符。
這是寫的僞代碼將使問題很多更清晰的情況下。那麼讓我們假設用戶輸入「son」 - 你想要匹配用戶,例如名字或者「Wilson」,或者「Robinson」的姓氏嗎?我對管道工的要求感到困惑 - 你只想搜索水管工還是首先想要一個結果集? –
@DavidWeldon用戶的類型是水管工,從他們那裏我必須得到那些有他兒子名字的元素。 或者我們可以這樣說,我們得到的用戶的名字有他們的兒子像羅賓遜或威爾遜,然後從那個結果我們得到那些誰是管道工 – Gardezi