gpt4 book ai didi

使用 $project 和 $sort 的 MongoDb 聚合查询

转载 作者:可可西里 更新时间:2023-11-01 10:00:07 25 4
gpt4 key购买 nike

我的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'"

有人可以帮我解决这个问题吗?或者我做错了什么。

最佳答案

您需要创建一个管道来创建额外的 refCount 字段来保存总计数。第一个管道是 $addField 因为它允许您向文档添加新字段。 $add 使总和成为可能 运算符。

前面的流水线步骤将是 $sort 按新字段降序排列文档。

最后一步 $limit 将返回单个文档:

db.getCollection('foo').aggregate([
{
"$addFields": {
"refCount": {
"$add": ["$first.count", "$second.count", "$third.count"]
}
}
},
{ "$sort": { "refCount": -1 } },
{ "$limit": 1 }
])

关于使用 $project 和 $sort 的 MongoDb 聚合查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47498291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com