小组讨论后的示例文档:
[
{
"_id": {
workhour: 1
},
totalChats: 156
},
{
"_id": {
workhour: 0
},
totalChats: 36
}
]
你好!如何找到这两个对象的百分比?最终结果应为:
[
{
"totalChats": 192,
"workhour0": 19,
"workhour1": 81
}
]
谢谢!
您需要有至少一个MongoDB版本4.0
才能做到这一点,要带到您需要与string结合{workhour : 1}
的形式,因此要转换为字符串,您需要使用仅在> =中可用。您需要在阶段之后添加以下阶段:workhour1
workhour
1
1
$toString
4.0
$group
db.collection.aggregate([
{
$group: {
_id: "", // Group without any condition will group all docs
docs: { $push: { workhour: "$_id.workhour", totalChats: "$totalChats" } // push {workhour :...,totalChats:...} objects to data array
},
totalChats: { $sum: "$totalChats" } // Sum-up `totalChats` across all docs
}
},
{
$project: {
_id: 0,
totalChats: 1,
data: {
$arrayToObject: { // Converts [{k :..., v:...}, {k :..., v:...}] into {k : v, k:v }
$map: { // Pushing objects {k:...,v:...} to an array
input: "$docs",
in: { k: { $concat: [ "workhour", { $toString: "$$this.workhour" } ] }, v: { $multiply: [ { $divide: [ "$$this.totalChats", "$totalChats" ] }, 100 ] } }
}
}
}
}
},
/** Replace root of doc with newly created object */
{
$replaceRoot: { newRoot: { $mergeObjects: [ "$data", { totalChats: "$totalChats" } ] } }
}
])
测试: mongoplayground
参考: 聚合运算符
注意:你应该保持18.75
原样,而不是将其转换为19
与81.25
以81
不产生任何不确定度。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句