我有下一个查询,该查询过滤了集合中的嵌套数组文档并且不起作用(总是返回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; }
...
}
谢谢!
答案 0 :(得分:0)
对于复杂查询或嵌套查询,可以尝试使用聚合函数。这是一个很好的阅读 https://mikaelkoskinen.net/post/mongodb-aggregation-framework-examples-in-c