2014-03-27 80 views
0

我的用戶集合將數據這樣MongoDB的匹配查詢建築

{ name:"steve" }, { name:"david" }, { name:"sana" }, { name:"robert" } 

我的查詢是這樣的

var myCollections= _database.GetCollection<RawBsonArray>("users"); 
var query = Query.Matches("name", "Steve Sam Steward Savior Sana"); 
myCollections.Find(query); 

上面的查詢會找到適合「史蒂夫山姆管家救主薩那的所有用戶名「但我想任何用戶名與任何字「史蒂夫山姆管家救主薩娜」

匹配怎樣才能讓反

預期結果上面的查詢工作{ name:"steve" },{ name:"sana" }

我去做ForEach循環,但我不確定這是否是正確的方法。

這就是我想實現

_users.Any(x => "Steve Sam Steward Savior Sana".ToLower().Contains(x.name.ToLower())); 
+0

不應該在你子句中做一個? –

回答

0

我想你需要什麼$in操作。雖然,我不熟悉C#,這是它如何在shell來完成:

db.users.find({"name":{$in:["Steve", "Sam", "Steward", "Savior", "Sana"]}}) 

我希望這將有助於你想出在C#中的等價物。

+0

不是。這裏Steve Sam管家......所有這些都是單個字符串 – HaBo

+0

我不認爲它在MongoDB中是可行的。你不能使用String方法在客戶端程序中分割/標記字符串嗎?我剛剛google了一下,發現[這](http://msdn.microsoft.com/en-us/library/system.string.split.aspx) –

+0

這裏是我正在嘗試實現_users.Any(x =>「 Steve Sam Steward Saviour Sana「.ToLower()。Contains(x.name.ToLower())); – HaBo

0

您可以使用:

var usernames = new List<string>() {@"Steve", @"Sam", @"Steward", @"Savior", @"Sana"}; 
// regex token list 
var tokens = new List<string>(); 
for (var i = 0; i < usernames.Count; i++) 
{ 
    // create the regex format 
    var userRegex = string.Format("^{0}", usernames[i]); 
    tokens.Add(userRegex); 
} 
var searchByUsernameRegex = string.Join(@"|", tokens); 
Collection.Find(Query.Matches("Username", new BsonRegularExpression(searchByUsernameRegex))).ToList(); 

OR

// regex token list 
var tokens = new List<string>(); 
for (var i = 0; i < users.Count; i++) 
{ 
    // create the regex format 
    var userRegex = string.Format("^{0}", users[i]); 
    tokens.Add(userRegex); 
} 
// create regex to match the usernames 
var regexes = tokens.Select(x => new Regex(x)).ToList(); 
// construct the query 
var usersQuery = Query.In("Username", new BsonArray(regexes)); 
+0

「Steve Sam Steward救世主薩那」這是一個動態的字符串,可以有字母數字值。爲了遵循你的方式,我將不得不通過空格分割字符串並執行正則表達式匹配 – HaBo

+0

是的,調用「name1 name2」不是問題。分割('')來標記搜索查詢 –

+0

對不起。在處理1000條記錄時使用正則表達式進行通配符搜索的不好主意 – HaBo