我的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
},
}
我想显示具有最高计数总数,第二计数和第三计数的文档。
在这种情况下,输出应为 -
{
"_id" : ObjectId("5a187babdbf0a03cdca0d0bd"),
"aggregationDate" : "2017-10-31",
"ipaddress" : "10.65.66.182",
"first" : {
"count" : 4
},
"second" : {
"count" : 10
},
"third" : {
"count" : 4
},
}
我只需要一个文档作为输出。
db.getCollection('foo').aggregate(
{
$project: {
_id: "$ipaddress",
max: { $max: { $add: [ "$first.count", "$second.count", "$third.count"] } }
}
},
{ $sort: { refCount: -1 }}
)
我收到以下异常
"errmsg" : "exception: invalid operator '$max'"
有人可以帮我解决这个问题吗?或者我做错了什么。
答案 0 :(得分:1)
您需要创建一个管道,创建额外的refCount
字段以保存总计数。第一个管道是 $addField
,因为它允许您向文档添加新字段。使用 $add
运算符即可实现总和。
前面的管道步骤将是 $sort
,以按新字段降序排序文档。
最后一步 $limit
将返回单个文档:
db.getCollection('foo').aggregate([
{
"$addFields": {
"refCount": {
"$add": ["$first.count", "$second.count", "$third.count"]
}
}
},
{ "$sort": { "refCount": -1 } },
{ "$limit": 1 }
])