C#mongodb其中OR List <string> </string>

时间:2012-07-24 22:29:43

标签: c# mongodb

我的文档有一个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)

2 个答案:

答案 0 :(得分: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 }));

答案 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现在已过时。