C# 如何在C中实现MongoDB嵌套的$elemMatch查询#

C# 如何在C中实现MongoDB嵌套的$elemMatch查询#,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,我有以下格式的MongoDB集合 { "_id" : ObjectId("56c6f03ffd07dc1de805e84f"), "Details" : { "a" : [ [ { "DeviceID" : "log0", "DeviceName" : "Dev0" }, { "DeviceID" : "lo

我有以下格式的MongoDB集合

{
"_id" : ObjectId("56c6f03ffd07dc1de805e84f"),
"Details" : {
    "a" : [
            [ { 
                "DeviceID" : "log0", 
                "DeviceName" : "Dev0"
              },
              { 
                "DeviceID" : "log1", 
                "DeviceName" : "Dev1"
              }
            ],
            [ { 
                "DeviceID" : "Model0", 
                "DeviceName" : "ModelName0"
              },
              { 
                "DeviceID" : "Model1", 
                "DeviceName" : "ModelName1"
              }
            ]
        ]
    }
}
我正在尝试获取数组“a”中的
DeviceName
包含特定值(比如“Name0”)的所有文档。但是,使用以下Mongo查询时,我可以获得所需的结果:

db.test_collection.find({"Details.a":{$elemMatch:{$elemMatch:{DeviceName : /.*Name0.*/}}}});
现在,我正在努力用C#实现上述查询。有谁能指导我吗

到目前为止,我已经尝试了下面的代码,但它没有按预期工作

query = Query.And(Query.ElemMatch("Details.a", Query.And(Query.ElemMatch("DeviceName", Query.Matches("DeviceName", new BsonRegularExpression("Name0"))))));

提前感谢

老实说,用C#编写查询有点棘手,但你可以一直玩把戏

var bsonQuery = "{'Details.a':{$elemMatch:{$elemMatch:{DeviceName : /.*Name0.*/}}}}";
var filter = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>(bsonQuery);

var result = col.FindSync (filter).ToList();
var bsonQuery=“{'Details.a':{$elemMatch:{$elemMatch:{$elemMatch:{DeviceName:/.*Name0.*/}}}”;
var filter=MongoDB.Bson.Serialization.BsonSerializer.Deserialize(bsonQuery);
var result=col.FindSync(filter.ToList();
我将一个普通MongoDB查询反序列化为一个BsonDocument,作为交换,我将把它作为过滤器传递给FindAsync

最后,您将在可变结果中获得期望的结果

注意:我假设MongoDB连接已经建立,变量
col
保存对MongoDB集合的引用

编辑:请参阅以下链接。现在已经确认C#driver不支持匿名过滤器,所以目前不支持使用
内置程序编写上述查询


长话短说,您只有一个选择,那就是查询,正如我在解决方案中提到的那样。

Wow..太好了!这正是我想要的。它创造了奇迹。Thanx很多Saleem:-)