2012-07-24 44 views
0

我的文檔有一個類型爲List<string>的屬性。 我想返回集合中的所有文檔,其中一組字符串與此List<string>屬性中的任何項匹配。C#mongodb其中OR列表<string>

我想構建這樣類似下面的問題,但在C#:

MongoDB find where key equals string from array

我知道這是關閉的,但它是我最好的嘗試:

var queryItems = new List<QueryComplete>(); 
queryItems.Add(Query.EQ("PropertyName", "test")); 
var query= Query.Or(queryItems.ToArray()); 
var qd = new QueryDocument(new BsonDocument { query.ToBsonDocument() }); 
var result = GetCollection<CollectionName>().FindAs<Type>(qd) 

回答

1

看起來像什麼你正在尋找的是這裏描述:

ContainsAny

此方法用於測試數組(或類似數組)的字段或屬性是否包含任何提供的值。

var query = 
    from c in collection.AsQueryable<C>() 
    where c.A.ContainsAny(new[] { 1, 2, 3 }) 
    select c; 
// or 
var query = 
    collection.AsQueryable<C>() 
    .Where(c => c.A.ContainsAny(new[] { 1, 2, 3 })); 
+0

yes ContainsAny完美無缺。我現在在文檔中看到。謝謝 – user376456 2012-07-25 22:32:15

1

如果由於某種原因,你不喜歡使用LINQ,您可以使用查詢生成器來寫這樣的:

var setOfStrings = new BsonValue[] { "a", "b", "c" }; 
var query = Query.Or(
    Query.EQ("PropertyName", "test"), 
    Query.In("List", setOfStrings) 
); 
var cursor = collection.FindAs<C>(query); 

如果要仔細檢查本機MongoDB的查詢是什麼樣子你可以使用:

var json = query.ToJson(); 

在這種情況下顯示了相當的MongoDB的查詢是:

{ "$or" : [ 
    { "PropertyName" : "test" }, 
    { "List" : { "$in" : ["a", "b", "c"] } } 
] } 

如果這不是您尋找的本地MongoDB查詢,請告訴我。

p.s.在1.5版中有一個新的查詢生成器,現在QueryComplete已經過時。

+0

感謝您的額外信息和ToJson()方法。我將在shell中使用它來進行測試。也許這應該是一個額外的問題,但是有沒有Linq查詢ContainsAny會比上面的QueryBuilder慢或者他們是否生成相同的MongoDB查詢的情況?這個線程對我理解Linq/Querybuilder/Mongodb shell查詢很有幫助 – user376456 2012-07-25 22:36:39