如何聚合 MongoDB 嵌套查询?

Posted

技术标签:

【中文标题】如何聚合 MongoDB 嵌套查询?【英文标题】:How to Aggregate MongoDB Nested Query? 【发布时间】:2021-07-03 01:03:29 【问题描述】:

所以很长一段时间以来,我一直在尝试聚合两组特定的文档,但直到现在都没有成功。 我的文件是: 文件1:

 
        "_id": 
            "$oid": "606d68e88346778f70f14b50"
        ,
        "user": 123,
        "task1": 
            "Humor": 0,
            "Spirituality": 1,
            "Fairness": 0
        ,
        "task2": 
            "Humor": 0,
            "Spirituality": 1,
            "Fairness": 0
        ,
        "task3": 
            "Humor": 0,
            "Spirituality": 1,
            "Fairness": 0
        
    

文档2:


    "_id": 
        "$oid": "606d68fe8346778f70f14b51"
    ,
    "user": 123,
    "task1": 
        "Humor": 0,
        "Spirituality": 1,
        "Fairness": 0
    ,
    "task2": 
        "Humor": 0,
        "Spirituality": 1,
        "Fairness": 0
    ,
    "task3": 
        "Humor": 0,
        "Spirituality": 1,
        "Fairness": 0
    

我要做的是汇总所有文档中所有特征的分数。例如: 我的灵性在文档 1 中出现了 3 次,如果我总结一下,我在文档 1 中获得 3 分,在文档 2 中再次获得 3 分,总分为 6。

预期的输出应该是:

"user":123,"Humor":0,"Spirituality":6,"Fairness":0

我一直在尝试不同的方法,但到目前为止无济于事。非常感谢您的帮助。

【问题讨论】:

请为示例文档添加预期输出。 预期的输出应该是:"user":123,"Humor":0,"Spirituality":6,"Fairness":0 请编辑问题并添加详细信息。 刚刚做了,请检查一下 【参考方案1】:

演示 - https://mongoplayground.net/p/RV8W9t6zERq

$group by userid 并将任务推送到个人 task1、task2、task3 数组

在第二个管道中 $project 组合成一个 tasks 数组

在第三个管道中得到总和

db.collection.aggregate([
   $group:  _id: "$user", task1:  $push: "$task1" , task2:  $push: "$task2" , task3:  $push: "$task3"   ,
   $project:  _id: 0, userId: "$_id", tasks:  "$concatArrays": ["$task1", "$task2", "$task3"]  ,
   $project:  userId: 1, "Spirituality":    $sum: "$tasks.Spirituality" , "Humor":  $sum: "$tasks.Humor" , "Fairness":    $sum: "$tasks.Fairness"  
  
])

【讨论】:

以上是关于如何聚合 MongoDB 嵌套查询?的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB:如何使用查找查询填充嵌套对象?

MongoDB Mongoose 聚合查询深度嵌套数组删除空结果并填充引用

如何在spring数据mongodb中聚合一个嵌套对象并避免PropertyReferenceException?

在 MongoDB 中使用 group by、inner join 和嵌套条件进行聚合

当嵌套字典键发生变化时,如何使用嵌套字典查询 mongodb 文档?

如何通过将数据作为参数传递以过滤 unix 时间戳来查询具有聚合的 mongodb