如何使用mongodb c#驱动程序过滤嵌套文档?

时间:2018-12-29 21:18:49

标签: c# mongodb linq

我有下一个查询,该查询过滤了集合中的嵌套数组文档并且不起作用(总是返回false):

var collection = MongoClientSingleton.GetInstance().GetCollection<Access> 
("access");

var filters = Builders<Access>.Filter.Eq("modules", new BsonDocument { { 
"value", val }, { "enabled", true }, { "type", type } });

 return collection.Find(filters).Any();

使用linq构建过滤器时,我获得了成功:

var filters = Builders<Access>.Filter.Where(a => a.modules.Any(m => m.value == val && m.enabled == true && m.type == type));

但是我想要做的过滤器更像显示的第一个代码(带有BsonDocument类)。

Access和Module的类结构如下:

public class Access 
{
    ...

    public List<Module> modules {get; set; }

    ...
}

public class Module 
{
    ...

    public string value { get; set; }
    public bool enabled { get; set; }
    public string type { get; set; }

    ...
}

谢谢!

1 个答案:

答案 0 :(得分:0)

对于复杂查询或嵌套查询,可以尝试使用聚合函数。这是一个很好的阅读 https://mikaelkoskinen.net/post/mongodb-aggregation-framework-examples-in-c