gpt4 book ai didi

Mongodb 聚合在一个查询中需要帮助

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

我试图找到总出现次数及其占总出现次数的百分比

例如:

我们有一个具有以下集合结构的用户表

user : [
{
email : A@abc.com,
eyeColor: blue,
},
{
email : B@abc.com,
eyeColor: brown,
},
{
email : C@abc.com,
eyeColor: blue,
},
{
email : D@abc.com,
eyeColor: red,
},
{
email : E@abc.com,
eyeColor: blue,
}
]

现在我可以使用聚合查询获得眼睛颜色出现的总数

db.users.aggregate([$group : [_id: “$eyeColor”,total : {$sum : 1}]  
])

我需要像下面这样的输出

[{ "_id" : blue, "count" : 3 },{ "_id" : red, "count" : 1 },{ "_id" : brown, "count" : 1 }]

现在我想要得到的是我需要在上面的输出中的每个对象中使用公式 (occurrence/total_occurrence) * 100

例如考虑总产出 我们有 3 种蓝色,所以我需要像下面这样的东西

[{ "_id" : blue, "count" : 3, percentage: 60 },{ "_id" : red, "count" : 1, percentage: 20 },{ "_id" : brown, "count" : 1, percentage: 20 }, total : 5]

最佳答案

你需要使用$facet,有了facet你可以在同一个文档的不同字段上做多个操作

db.col.aggregate([
{ $facet : {
"total" : [{$count : "eyeColor"}],
"data" : [{$group : {_id : "$eyeColor", count : {$sum : 1}}}]
}},
{$unwind : "$data"},
{$addFields : {"data.percentage" : {$multiply : [{$divide : ["$data.count", {$arrayElemAt : ["$total.eyeColor", 0]}]}, 100]}}},
{$replaceRoot : {newRoot : "$data"}}
]).pretty()

关于Mongodb 聚合在一个查询中需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48678579/

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