如何使用通用查询生成器查询集合

时间:2018-08-22 16:30:05

标签: c# mongodb

我正在使用mongocsharpdriver nuget软件包(版本1.11.0)对mongo数据库运行查询。

在c#中创建查询对象时,我可以这样做:

var query = Query.EQ("RootValue", "foo");

我可以使用更好的通用查询构建器来做到这一点:

var query = Query<RootObject>.EQ(x=>x.RootValue, "foo");

现在考虑以下查询:

var query = Query.EQ("Things.Value", "bar");

此处Things是对象的集合,这些对象上带有字符串(Value)。在这种情况下,查询将返回在任何事物值中都具有匹配项的任何对象。

如何使用通用查询构建器编写此查询?

我无法计算出所需的表达方式,将其正确翻译为所需的内容...

以防万一,这是我的示例的类:

public class RootObject
{
    [BsonId]
    public ObjectId Id {get; set;}
    public IEnumerable<RepeatedObject> Things {get; set;}
    public string RootValue {get; set;}
}

public class RepeatedObject
{
    public string Value {get; set;}
}

1 个答案:

答案 0 :(得分:2)

使用此版本的驱动程序,以下查询

var query = Query<RootObject>.ElemMatch(x => x.Things, x => x.EQ(y => y.Value, "bar"));

将被转换为所需的MongoDB查询:

{ Things: { $elemMatch: { Value: "bar" } } }