我的 MongoDB 集合中有以下文档:
{ "_id" : 1, "semester" : 1, "grades" : [ 70, 87, 90 ] }
{ "_id" : 2, "semester" : 2, "grades" : [ 90, 88, 92 ] }
{ "_id" : 3, "semester" : 1, "grades" : [ 85, 100, 90 ] }
我想检索所有与第一学期匹配的文档,并为每个文档提供 id 字段、学期字段和大于 80 的一年级。 即对于上面的文档,查询的结果应该是:
{ "_id" : 1, "semester" : 1, "grades" : 87 }
{ "_id" : 3, "semester" : 1, "grades" : 85 }
这可能吗? 执行此操作的查询是什么(我使用的是 MongoDB 2.6)? 我知道如何使用 $elemMatch 进行投影来呈现所有大于 80 的成绩,或者如何使用“$”运算符仅呈现一年级,但是如何将它们组合起来以选择其中的第一个?
最佳答案
您可以使用aggregation pipeline
db.collection.aggregate([
{ "$unwind": "$grades" },
{ "$match":
{
"semester": 1,
"grades": { "$gt": 80 }
}
},
{ "$group":
{
"_id": "$_id",
"semester": { "$first": "$semester" },
"grades": { "$first": "$grades" }
}
}
])
关于mongodb - 在 mongodb 投影中组合 $elemMatch 和 $,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29205253/