我的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的所有等级,使用$ elemMatch进行投影。运算符,但如何将它们组合起来选择第一个呢?
答案 0 :(得分:2)
您可以使用aggregation pipeline
db.collection.aggregate([
{ "$unwind": "$grades" },
{ "$match":
{
"semester": 1,
"grades": { "$gt": 80 }
}
},
{ "$group":
{
"_id": "$_id",
"semester": { "$first": "$semester" },
"grades": { "$first": "$grades" }
}
}
])