【发布时间】:2015-03-28 09:50:08
【问题描述】:
使用 Linq 语法,如何精确匹配文档中的数组?
这个查询很好用,除了它匹配有其他孩子不是 3 或 4 岁的文档。
var query = collection.AsQueryable<Parent>().Where(p => p.Children.Any(c => c.Age == 3) && p.Children.Any(c => c.Age == 4));
例如,它不应该返回这个文档:
{
"_id" : ObjectId("5514c620923a9b55e22f0adf"),
"Name" : "Bob",
"Children" : [
{
"Name" : "Kid1",
"Age" : 5
},
{
"Name" : "Kid2",
"Age" : 4
},
{
"Name" : "Kid3",
"Age" : 3
}
]
}
并且应该匹配这个文件:
{
"_id" : ObjectId("5514c620923a9b55e22f0adf"),
"Name" : "Bob",
"Children" : [
{
"Name" : "Kid2",
"Age" : 4
},
{
"Name" : "Kid3",
"Age" : 3
}
]
}
这基本上是这个问题的副本,但使用 linq c# 语法。
Matching an array field which contains any combination of the provided array in MongoDB
如果您还可以使用 c# QueryBuilder 而不是 linq 来显示它,则可以加分。
【问题讨论】:
-
怎么样:
collection.AsQueryable<Parent>().Where(p => p.Children.All(c => new[]{3,4}.Contains(c.Age));? -
如果文档包含
[3,4,5],$all: [3,4]也会匹配