使用 sum 的 MongoDB 嵌套查找

Posted

技术标签:

【中文标题】使用 sum 的 MongoDB 嵌套查找【英文标题】:MongoDB nested lookup with sum 【发布时间】:2022-01-17 07:51:19 【问题描述】:

我需要从数据库中检索整个单个对象层次结构作为 JSON。同时从 3 级嵌套集合中求和。

场地

"_id": "2", "name": "name2"
"_id": "3", "name": "name3"
"_id": "4", "name": "name4"
"_id": "5", "name": "name5"

用户

"_id": "u2", "name": "u2", venue_id: "2"
"_id": "u3", "name": "u3", venue_id: "2"
"_id": "u4", "name": "u4", venue_id: "3"
"_id": "u5", "name": "u5", venue_id: "4"

显示

"_id": "s2", "name": "s2", host_id: "u2", "duration": 20
"_id": "s3", "name": "s3", host_id: "u2", "duration": 50
"_id": "s4", "name": "s4", host_id: "u2", "duration": 60
"_id": "s5", "name": "s5", host_id: "u4", "duration": 30

我需要检索用户与该场地相关联的所有场地以及显示持续时间的总和。

输出

"_id": "2", "name": "name2", "duration": 130
"_id": "3", "name": "name3", "duration": 30
"_id": "4", "name": "name4", "duration": 0
"_id": "5", "name": "name5", "duration": 0

【问题讨论】:

请出示您迄今为止工作的数据证明,*** 不是为您提供所有答案的地方,而是在您自己尝试后遇到困难时提供帮助。供您研究:docs.mongodb.com/manual/reference/operator/aggregation/lookup 我目前正在做的是嵌套查找,然后我最终得到每个用户的总和。当然,没有得到预期的输出。我现在会更新,谢谢。 【参考方案1】:

如果您要使用“嵌套”查找,您可能会想得过于复杂。 2 个简单的$lookup 应该足以满足您的需要。执行最后的$group 以获得预期结果。

db.venue.aggregate([
  
    "$lookup": 
      "from": "user",
      "localField": "_id",
      "foreignField": "venue_id",
      "as": "userLookup"
    
  ,
  
    "$unwind": 
      path: "$userLookup",
      preserveNullAndEmptyArrays: true
    
  ,
  
    "$lookup": 
      "from": "show",
      "localField": "userLookup._id",
      "foreignField": "host_id",
      "as": "showLookup"
    
  ,
  
    "$unwind": 
      path: "$showLookup",
      preserveNullAndEmptyArrays: true
    
  ,
  
    $group: 
      _id: "$_id",
      name: 
        $first: "$name"
      ,
      duration: 
        $sum: "$showLookup.duration"
      
    
  
])

这是Mongo playground 供您参考。

【讨论】:

哇,我真的想多了,非常感谢雷!

以上是关于使用 sum 的 MongoDB 嵌套查找的主要内容,如果未能解决你的问题,请参考以下文章

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

Yii2.如何在 MongoDB/ActiveQuery 中使用查找?

MongoDb:使用 $lookup 查找深度嵌套的对象

MongoDb:使用 $lookup 查找深度嵌套的对象

mongodb $查找带有投影的数组中的嵌套对象

如何在 mongodb 中查找包含 NaN 值的字段的 $avg 和 $sum?