【发布时间】:2019-05-20 16:40:38
【问题描述】:
我有一个结构看起来像这样的文档,其中包含嵌套的子文档
{
"_id":ObjectId("50419077c2e6a1e18a489a0f"),
"user":"Jone Doe",
"fooArray":[
{
"plot":"circle",
"color":"yellow",
},
{
"plot":"circle",
"color":"red",
},
{
"plot":"square",
"color":"green",
}
]
}
并且我想检索该文档中 fooArray 中具有圆形图的所有匹配元素。
这是我试过的
var filter = FilterBuilder.filter.Eq(doc => doc.User, User);
var projection = ProjectionBuilder
.Exclude(doc => doc.Id)
.Exclude(doc => doc.User)
.Include(doc => doc.FooArray)
.ElemMatch(x => x.FooArray, y => y.Plot == "circle");
var definition = new OperationDefinitions<ShapeDocument> { Filter = filter };
return await Performer.Perform(definition, async (def, collection) =>
{
var findResult = collection.Find(def.Filter).Project(projection);
var result = await findResult.SingleOrDefaultAsync();
});
这就是我得到的
{
"fooArray":[
{
"plot":"circle",
"color":"yellow",
}
]
}
但它只给了我第一个匹配的元素,而不是所有绘图等于圆形的元素
{
"fooArray":[
{
"plot":"circle",
"color":"yellow",
},
{
"plot":"circle",
"color":"red",
}
]
}
我确实阅读了提到的 mongodb 文档
" $elemMatch 运算符将查询结果中的字段内容限制为仅包含与 $elemMatch 条件匹配的第一个元素。"
不太清楚如何做到这一点!
【问题讨论】:
标签: c# mongodb asp.net-core mongodb-.net-driver