使用C#驱动程序同时使用$ in和$ elemMatch

时间:2014-03-04 15:35:13

标签: c# .net mongodb mongodb-.net-driver

我很难将工作MongoDB查询转换为C#驱动程序的无类型等效项。 查询:

{
    "Field" : { "$elemMatch" : { "$in" : ["Hamster"]}}
}

我有什么:

Query.ElemMatch("Field", Query.In("", new BsonArray(new[] { "Hamster" })));

生成:

{
    "Field" : { "$elemMatch" : { "" : { "$in" : ["Hamster"] }}}
}

这非常接近,但我无法弄清楚如何从$ in查询中删除该名称。

2 个答案:

答案 0 :(得分:2)

Query.ElemMatch("Field", new QueryDocument("$in", new BsonArray(new[] { "Hamster" })));

答案 1 :(得分:0)

似乎它应该是可能的,但是辅助方法的结构方式我看不到直接构造该查询的简单方法。

我可以重新创建所需查询的唯一方法是执行以下操作:

var queryDocument = QueryDocument.Parse("{\"$in\" : [\"Hamster\"]}");
var nestedQueryDocument = Query.ElemMatch("Field", new QueryDocument(queryDocument));

创建以下输出

{
    "Field" : { "$elemMatch" : { "$in" : ["Hamster"]}}
}

虽然不是最优雅的解决方案。