使用Mongodb Aggregation管道(我仍在发现),如何选择字段中具有最高值的每种类型的记录。
结果应包括匹配行的所有字段(变量而非预定义)。
示例数据:
[
{_id:1, "type":"a", "price":1, ...},
{_id:2, "type":"a", "price":2, ...},
{_id:3, "type":"b", "price":3, ...},
{_id:4, "type":"b", "price":4, ...},
]
预期结果:
[
{_id:2, "type":"a", "price":2, ...},
{_id:4, "type":"b", "price":4, ...},
]
我想过
$sort
然后使用$limit
1.但是如何将限制应用于每种类型而不是整个集合?$match
某种"其中max"条件是否存在?$group
与$max
或$first
一起使用,但不包括所有字段如何订购或嵌套操作以实现所需的结果?
答案 0 :(得分:2)
尝试以下查询:
db.yourDb.aggregate(
// Pipeline
[
// Stage 1
{
$sort: {
"price": -1
}
},
// Stage 2
{
$group: {
"_id": "$type",
"document": { "$first": "$$ROOT" }
}
},
// Stage 3
{
$replaceRoot: {
"newRoot": "$document"
}
},
]
);
它应该返回以下结果:
{
"_id" : NumberInt(2),
"type" : "a",
"price" : NumberInt(2)
}
{
"_id" : NumberInt(4),
"type" : "b",
"price" : NumberInt(4)
}