我的文档有一个List<string>
类型的属性。
我想从一个集合中返回所有文档,其中一组字符串与此List<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)
答案 0 :(得分:1)
这里描述了您正在寻找的内容:
此方法用于测试数组(或类数组)字段或属性是否包含任何提供的值。
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 }));
答案 1 :(得分: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现在已过时。