我正在使用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;}
}
答案 0 :(得分:2)
使用此版本的驱动程序,以下查询
var query = Query<RootObject>.ElemMatch(x => x.Things, x => x.EQ(y => y.Value, "bar"));
将被转换为所需的MongoDB查询:
{ Things: { $elemMatch: { Value: "bar" } } }