在Mongodb中使用聚合,查找和管道进行查询

用户名

我必须管理一个带有评论的墙,每个墙都有许多父评论,每个父评论都有子评论。

我的收藏是这样的

 groupId : {type: Schema.Types.ObjectId, ref: 'groups', unique: true},
    comments : [{
        commentId : {type: Schema.Types.ObjectId, ref: 'comments'},
        user : {type: Schema.Types.ObjectId, ref: 'users'},
    }],

集合评论是这样的

text : String,
parentCommentId : {type: Schema.Types.ObjectId, ref: 'comments', default : null},

我想通过父注释显示墙,每个子注释在其父注释下。

我尝试了此查询,但未返回任何结果

db.getCollection('walls').aggregate([
        {$match: {groupId: ObjectId("5e8c5caa75b1cd342a1175eb")}},
        {
            "$lookup": {
                from: "comments",
                let: { item: "$comments.commentId" },
                pipeline: [
                    { $match:
                        { $expr: { $eq: [ "$parentCommentId",  "$$item" ] }


                        }
                    },
                    { $project: {
                        "_id": 1,
                        "parentCommentId": 1,
                        "text": 1                       
                    } }
                ],
                as: "comments"
            }
        },
        {
            $project: {
                groupId: 1,
                "comments":1,
                date: 1
            }
        }
    ])

墙上的数据

{
    "_id" : ObjectId("5e95b4b49d3e303d667a8b71"),
    "groupId" : ObjectId("5e8c5caa75b1cd342a1175eb"),
    "comments" : [ 
        {
            "_id" : ObjectId("5e95b4b49d3e303d667a8b72"),
            "commentId" : ObjectId("5e95b4b49d3e303d667a8b70")
        }, 
        {
            "_id" : ObjectId("5e95b4ef80ae1244693aa857"),
            "commentId" : ObjectId("5e95b4ef80ae1244693aa856")
        }, 
        {
            "_id" : ObjectId("5e95b51080ae1244693aa859"),
            "commentId" : ObjectId("5e95b51080ae1244693aa858")
        }, 
        {
            "_id" : ObjectId("5e95b51d80ae1244693aa85b"),
            "commentId" : ObjectId("5e95b51d80ae1244693aa85a")
        },
        {
           "_id" : ObjectId("5e95b53580ae1244693aa85e"),
           "commentId" : ObjectId("5e95b53580ae1244693aa85c")
        }
    ],

}

评论中的数据

{
    "_id" : ObjectId("5e95b4b49d3e303d667a8b70"),
    "parentCommentId" : null,
    "text" : "Hello parent 1"
}

{
    "_id" : ObjectId("5e95b4ef80ae1244693aa856"),
    "parentCommentId" : null,
    "text" : "Hello parent 2",
    "date" : ISODate("2020-04-14T13:04:47.860Z")
}

{
    "_id" : ObjectId("5e95b51080ae1244693aa858"),
    "parentCommentId" : ObjectId("5e95b4b49d3e303d667a8b70"),
    "text" : "Hello child 1 parent 1"
}

{
    "_id" : ObjectId("5e95b51d80ae1244693aa85a"),
    "parentCommentId" : ObjectId("5e95b4b49d3e303d667a8b70"),
    "text" : "Hello child 2 parent 1"

}

{
    "_id": "5e95b53580ae1244693aa85c",
    "parentCommentId": "5e95b4ef80ae1244693aa856",
    "text": "Hello child 1 parent 2",
}

理想的结果

{
    "success": true,
    "data": [
        {
            "_id": "5e95b4b49d3e303d667a8b71",
            "groupId": "5e8c5caa75b1cd342a1175eb",
            "comments": [
                {
                    "_id": "5e95b4b49d3e303d667a8b70",
                    "parentCommentId": null,
                    "text": "Hello parent 1",
                    "childs": {
                                 {
                                   "_id": "5e95b51080ae1244693aa858",
                                   "parentCommentId": "5e95b4b49d3e303d667a8b70",
                                   "text": "Hello child 1 parent 1",
                                 },
                                 {
                                   "_id": "5e95b51d80ae1244693aa85a",
                                   "parentCommentId": "5e95b4b49d3e303d667a8b70",
                                   "text": "Hello child 2 parent 1",
                                 },
                              }
                },
                {
                    "_id": "5e95b4ef80ae1244693aa856",
                    "parentCommentId": null,
                    "text": "Hello parent 2",
                    "childs": {
                                  {
                                    "_id": "5e95b53580ae1244693aa85c",
                                    "parentCommentId": "5e95b4ef80ae1244693aa856",
                                    "text": "Hello child 1 parent 2",
                                 }
                         }
                },


            ],
         }
    ]
}

如何修改查询?谢谢。

阿什

您可以使用以下汇总

db.walls.aggregate([
  { "$lookup": {
    "from": "comments",
    "let": { "commentIds": "$comments.commentId" },
    "pipeline": [
      { "$match": {
        "$expr": { "$in": ["$_id", "$$commentIds"] },
        "parentCommentId": null
      }},
      { "$sort": { "text": -1 }},
      { "$graphLookup": {
        "from": "comments",
        "startWith": "$_id",
        "connectFromField": "parentCommentId",
        "connectToField": "parentCommentId",
        "as": "childs"
      }}
    ],
    "as": "comments"
  }}
])

蒙哥运动场

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Mongodb中使用聚合对复杂条件进行排序

来自分类Dev

使用MongoDB聚合管道展开和汇总子子文档

来自分类Dev

在LINQ中使用聚合查询进行自我联接

来自分类Dev

如何在单个mongodb查询中使用求和,乘法,除法和分组聚合

来自分类Dev

如何通过使用填充或在mongodb中使用聚合进行内部查询来使用填充功能

来自分类Dev

在mongodb中使用外部引用进行聚合

来自分类Dev

聚合和还原中使用哪些节点进行还原?

来自分类Dev

如何在聚合管道mongodb中使用$ update / $ set运算符?

来自分类Dev

使用关联集合字段进行查找和排序的MongoDB聚合正在减慢查询速度

来自分类Dev

我在mongodb聚合中使用查找,但是它不返回我要查找的数据

来自分类Dev

在MongoDB中使用对象数组进行聚合

来自分类Dev

使用带有$ lookup和$ match的聚合的搜索查询mongodb

来自分类Dev

使用$ group管道进行条件聚合

来自分类Dev

MongoDB在3个集合之间进行聚合和查找

来自分类Dev

MongoDB使用聚合管道查找和更新

来自分类Dev

MongoDB聚合查询,查找失败

来自分类Dev

MongoDB聚合双重查找和管道

来自分类Dev

在MongoDB聚合查询中使用以$开头的字段

来自分类Dev

在Mongodb中使用聚合对复杂条件进行排序

来自分类Dev

在带有$ or的MongoDB聚合查询中使用数组

来自分类Dev

在MongoDB中使用$ where进行Grails查询

来自分类Dev

在对nodejs和mongodb的字段中使用参数时,查找查询结果为空

来自分类Dev

在聚合框架mongodb中使用$ unwind和$ text

来自分类Dev

MongoDB:聚合查询中的Near +查找

来自分类Dev

在Mongodb中使用聚合管道重新格式化集合

来自分类Dev

在 mongodb 中使用多个 $lookup 和聚合

来自分类Dev

使用 MongoDB 中的聚合框架进行分组和计数

来自分类Dev

使用 ObjectId 的 mongodb 聚合查找

来自分类Dev

使用 spring 的 MongoDB 聚合查询

Related 相关文章

  1. 1

    在Mongodb中使用聚合对复杂条件进行排序

  2. 2

    使用MongoDB聚合管道展开和汇总子子文档

  3. 3

    在LINQ中使用聚合查询进行自我联接

  4. 4

    如何在单个mongodb查询中使用求和,乘法,除法和分组聚合

  5. 5

    如何通过使用填充或在mongodb中使用聚合进行内部查询来使用填充功能

  6. 6

    在mongodb中使用外部引用进行聚合

  7. 7

    聚合和还原中使用哪些节点进行还原?

  8. 8

    如何在聚合管道mongodb中使用$ update / $ set运算符?

  9. 9

    使用关联集合字段进行查找和排序的MongoDB聚合正在减慢查询速度

  10. 10

    我在mongodb聚合中使用查找,但是它不返回我要查找的数据

  11. 11

    在MongoDB中使用对象数组进行聚合

  12. 12

    使用带有$ lookup和$ match的聚合的搜索查询mongodb

  13. 13

    使用$ group管道进行条件聚合

  14. 14

    MongoDB在3个集合之间进行聚合和查找

  15. 15

    MongoDB使用聚合管道查找和更新

  16. 16

    MongoDB聚合查询,查找失败

  17. 17

    MongoDB聚合双重查找和管道

  18. 18

    在MongoDB聚合查询中使用以$开头的字段

  19. 19

    在Mongodb中使用聚合对复杂条件进行排序

  20. 20

    在带有$ or的MongoDB聚合查询中使用数组

  21. 21

    在MongoDB中使用$ where进行Grails查询

  22. 22

    在对nodejs和mongodb的字段中使用参数时,查找查询结果为空

  23. 23

    在聚合框架mongodb中使用$ unwind和$ text

  24. 24

    MongoDB:聚合查询中的Near +查找

  25. 25

    在Mongodb中使用聚合管道重新格式化集合

  26. 26

    在 mongodb 中使用多个 $lookup 和聚合

  27. 27

    使用 MongoDB 中的聚合框架进行分组和计数

  28. 28

    使用 ObjectId 的 mongodb 聚合查找

  29. 29

    使用 spring 的 MongoDB 聚合查询

热门标签

归档