考虑我有这样的数据:
| id | property | score | remark |
-------------------------------------------
| aaaa | alpha | 1 | alpha lowest |
| bbbb | beta | 2 | beta highest |
| cccc | alpha | 2 | alpha highest |
根据上述数据,我想按字段property
选择不同,并按score
最高值对其进行排序,因此预期结果将为
| id | property | score | remark |
-------------------------------------------
| bbbb | beta | 2 | beta highest |
| cccc | alpha | 2 | alpha highest |
如何使用mongodb执行此操作?
答案 0 :(得分:2)
您可以通过运行以下聚合管道操作轻松完成此操作:
db.collection.aggregate([
{ "$sort": { "score": -1 } },
{
"$group": {
"_id": "$property",
"id": { "$first": "$_id" },
"score": { "$first": "$score" },
"remark": { "$first": "$remark" }
}
},
{
"$project": {
"_id": 0,
"property": "$_id",
"score": 1,
"remark": 1,
"id": 1
}
}
])
示例输出
{ "id" : "bbbb", "score" : 2, "remark" : "beta highest ", "property" : "beta" }
{ "id" : "cccc", "score" : 2, "remark" : "alpha highest ", "property" : "alpha" }
答案 1 :(得分:0)
MongoDB has a distinct operator。但是,它只返回一个“列”。您需要进行多个查询。 最好的选择是使用MongoDB Aggregation Framework。它使用pipeline of operations。 我不知道数据,但可能有点像:
db.collection.aggregate([
{ '$group' : { _id : '$property' , score: { '$max': '$score' } } }
])
您可以使用Robomongo client来试验此方法。