我有这个要求,我有一个如下集合:
{
"_id" : 1,
"name" : "sam",
"Array" : [
{ "K" : "A", "V" : 8 },
{ "K" : "B", "V" : 5 },
{ "K" : "C", "V" : 13 }
]
},
{
"_id" : 2,
"name" : "tom",
"Array" : [
{ "K" : "D", "V" : 12 },
{ "K" : "E", "V" : 14 },
{ "K" : "F", "V" : 2 }
]
},
{
"_id" : 3,
"name" : "jim",
"Array" : [
{ "K" : "G", "V" : 9 },
{ "K" : "H", "V" : 4 },
{ "K" : "I", "V" : 2 }
]
}
我想运行一个查询,返回每个_id的子文档,其中包含最高的" V",所以在这种情况下我会得到:
{ "_id" : 1, "name" : "sam", "Array" : [ { "K" : "C", "V" : 13 } ] }
{ "_id" : 2, "name" : "tom", "Array" : [ { "K" : "E", "V" : 14 } ] }
{ "_id" : 3, "name" : "jim", "Array" : [ { "K" : "G", "V" : 9 } ] }
答案 0 :(得分:0)
您可以使用$filter
和$max
运算符仅选择V
字段值等于数组中最大值的子文档。
此处使用$addFields
管道阶段来指定文档中的所有其他字段。
db.collection.aggregate([
{
"$addFields":{
"Array":{
"$filter":{
"input":"$Array",
"cond":{
"$eq":[
"$$this.V",
{
"$max":"$Array.V"
}
]
}
}
}
}
}
])