gpt4 book ai didi

mongodb - 如何在整个集合中进行求和查询?

转载 作者:行者123 更新时间:2023-12-04 08:51:47 25 4
gpt4 key购买 nike

我有这个收藏

{ 
"_id" : BinData(0, "JUw6VoBVdtqAQ2g7sn0sog=="),
"os_name" : "android"
}
我想在一个聚合查询中检索以计算文档数
os_android => count of documents where "os_name" = "android" 
os_ios => count of documents where "os_name" = "ios"
total => the total count of document
我能怎么做 ?
我试试这个:
db.getCollection("myCollection").aggregate(
[
{$group:{
_id:{},
by_os_ios:{$sum:{$cond:[{os_name:"ios"},NumberInt(1),NumberInt(0)]}},
by_os_android:{$sum:{$cond:[{os_name:"android"},NumberInt(1),NumberInt(0)]}},
total:{$sum:1}}
},
{$addFields:{
"by_os.ios":"$by_os_ios",
"by_os.android":"$by_os_android"}},
{$project:{
_id:0,
by_os_ios:0,
by_os_android:0}}
]
);
但这不起作用:(我错过了什么?

最佳答案

您错过了 $eq$cond , 您可以使用 { $eq:["$field_name", "value to matched"] } 检查条件

db.getCollection("myCollection").aggregate([
{
$group: {
_id: {},
by_os_ios: { $sum: { $cond: [{ $eq: ["$os_name", "ios"] }, 1, 0] } },
by_os_android: { $sum: { $cond: [{ $eq: ["$os_name", "android"] }, 1, 0] } },
total: { $sum: 1 }
}
},
... // your other pipeline stages
])
Playground

第二种可能的方式,
  • $group创建名为 root 的数组
  • $project使用 $size 获取文档总数
  • $reduce遍历根数组并检查条件,如果它的 ios 然后求和,如果它的 android 然后使用 $add 求和并通过 $mergeObjects 与当前值对象合并

  • Playground

    关于mongodb - 如何在整个集合中进行求和查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64064951/

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