mongodb - mongodb聚合中的项目嵌套嵌入文档

标签 mongodb mongodb-query aggregation-framework pymongo

我有一个嵌套的嵌入文档,看起来像这样。每个帖子都有 n 条评论,每条评论都有一个包含姓名和电子邮件 ID 的用户详细信息。

我只想将评论用户的姓名投影到列表中

{
    "PostId":"Post001",
    "Comments":[
         {"_id": "001",
          "CommentedBy":{
            "_id":"User001",
            "Name":"UserName001",
            "email":"user001@eg.com"
            }
         },
         {"_id": "002",
           "CommentedBy":{
            "_id":"User002",
            "Name":"UserName002",
            "email":"user001@eg.com"
            }
         },
         {"_id": "003",
          "CommentedBy":{
            "_id":"User003",
            "Name":"UserName003",
            "email":"user001@eg.com"
            }
         }
    ]
}

我想通过使用 mongodb 的聚合管道将其转换为如下所示的内容。

{
    "PostId":"Post001"
    "Comments":[
         {"_id": "001",
          "CommentedBy":"UserName001",
         },
         {"_id": "002",
           "CommentedBy": "UserName002"
         },
         {"_id": "003",
          "CommentedBy": "UserName003"
         }
    ]
}

使用 mongo 的投影查询提供一个 CommentedBy 列表,其中包含所有名称。 如何使用 mongo 的聚合查询来实现此目的。有没有办法在不使用 $unwind.

的情况下做到这一点

我尝试过的查询以及得到的结果。

db.getCollection('post').aggregate([
{$project:{"Comments.CommentedBy":"$Comments.CommentedBy.Name"}}
])

{
    "_id" : ObjectId("5b98b4cc3bb8c65aeacabd78"),
    "Comments" : [ 
        {
            "CommentedBy" : [ 
                "UserName001", 
                "UserName002", 
                "UserName003"
            ]
        }, 
        {
            "CommentedBy" : [ 
                "UserName001", 
                "UserName002", 
                "UserName003"
            ]
        }, 
        {
            "CommentedBy" : [ 
                "UserName001", 
                "UserName002", 
                "UserName003"
            ]
        }
    ]
}

最佳答案

您可以尝试使用$map聚合,并可以通过循环 Comments 数组来更改内部的键。

db.collection.aggregate([
  { "$project": {
    "PostId": 1,
    "Comments": {
      "$map": {
        "input": "$Comments",
        "as": "comment",
        "in": {
          "_id": "$$comment._id",
          "CommentedBy": "$$comment.CommentedBy.Name"
        }
      }
    }
  }}
])

关于mongodb - mongodb聚合中的项目嵌套嵌入文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52288594/

相关文章:

javascript - Mongoose 中嵌入文档的重复键错误索引

mongodb - 在 MongoDB 中展平嵌套对象并重命名

node.js - 蒙戈警告: log line attempted (48kB) over max size (10kB)

node.js - 如何根据常见的数组元素对文档进行匹配和排序

mongodb - 将 $exists 与 $redact 与 mongo 聚合一起使用?

java - 是什么导致 MongoDB/GridFS MD5 哈希不匹配?

mongodb - 从聚合中批量删除文档

mongodb-query - 我们可以在同一个应用程序中同时使用 MongoRepository 和 MongoTemplate

mongodb - 在 mongodb 中按带时间戳的日期聚合数据

node.js - 只获取每个用户的一份文档 - mongoDB