在下面的集合中,我想按author
分组,然后对于每个author
,用最高的name
显示条目的price
[
{ "name": "Design", "price": 499, "author": "ted" },
{ "name": "Launch", "price": 999, "author": "ted" },
{ "name": "Test", "price": 1200, "author": "bob" },
{ "name": "Scale", "price": 1499, "author": "bob" }
]
因此,这里我的查询应该返回Launch
和Scale
。
我尝试了如下汇总,但是我不确定以后该怎么做,只是将所有条目拉到客户端上,然后处理所有组以找到具有最高价格的条目(这听起来效率很低)。
[
{
"$group": {
"_id": "$author",
"entry": {
"$push": {
"price": "$price",
"name": "$name"
}
}
}
}
]
什么是有效的方法?
谢谢!
答案 0 :(得分:1)
根据MongoDB - get documents with max attribute per group in a collection的答案
请尝试
db.collection.aggregate([
{ "$sort": { "price": -1 } },
{ "$group": {
"_id": "$author",
"price": { "$first": "$price" },
"name": { "$first" "$name" }
}}
])