Sad*_*Mad 5 aggregation mongodb
我的MongoDb集合如下
{
"_id" : ObjectId("5a187babdbf0a03cdca0d0bc"),
"aggregationDate" : "2017-10-31",
"ipaddress" : "10.65.66.184",
"first" : {
"count" : 3
},
"second" : {
"count" : 2
},
"third" : {
"count" : 3
},
}
{
"_id" : ObjectId("5a187babdbf0a03cdca0d0bd"),
"aggregationDate" : "2017-10-31",
"ipaddress" : "10.65.66.182",
"first" : {
"count" : 4
},
"second" : {
"count" : 10
},
"third" : {
"count" : 4
},
}
{
"_id" : ObjectId("5a187babdbf0a03cdca0d0be"),
"aggregationDate" : "2017-10-31",
"ipaddress" : "10.65.66.189",
"first" : {
"count" : 3
},
"second" : {
"count" : 1
},
"third" : {
"count" : 12
},
}
Run Code Online (Sandbox Code Playgroud)
我想显示第一个、第二个和第三个计数总和最高的文档。
在这种情况下,输出应该是 -
{
"_id" : ObjectId("5a187babdbf0a03cdca0d0bd"),
"aggregationDate" : "2017-10-31",
"ipaddress" : "10.65.66.182",
"first" : {
"count" : 4
},
"second" : {
"count" : 10
},
"third" : {
"count" : 4
},
}
Run Code Online (Sandbox Code Playgroud)
我只需要一个文档作为输出。
db.getCollection('foo').aggregate(
{
$project: {
_id: "$ipaddress",
max: { $max: { $add: [ "$first.count", "$second.count", "$third.count"] } }
}
},
{ $sort: { refCount: -1 }}
)
Run Code Online (Sandbox Code Playgroud)
我收到以下异常
"errmsg" : "exception: invalid operator '$max'"
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个问题吗?或者我做错了什么。
您需要创建一个管道来创建额外的refCount字段来保存总计数。第一个管道是$addField因为它允许您向文档添加新字段。总和是由$add运营商实现的。
前面的管道步骤将是$sort按新字段降序对文档进行排序。
最后一步$limit将返回单个文档:
db.getCollection('foo').aggregate([
{
"$addFields": {
"refCount": {
"$add": ["$first.count", "$second.count", "$third.count"]
}
}
},
{ "$sort": { "refCount": -1 } },
{ "$limit": 1 }
])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6641 次 |
| 最近记录: |