Запрос с агрегатом, graphLookup и конвейером в mongoDb - PullRequest
1 голос
/ 14 апреля 2020

Я должен управлять стеной с комментариями, у каждой стены есть много родительских комментариев, а у каждого родительского комментария есть дочерние комментарии.

моя коллекция стены похожа на

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

и коллекция комментариев похожа на это

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

Я хочу отобразить мою стену с помощью родительских комментариев, каждый дочерний комментарий под родительским комментарием.

, но результат в mon go db не сортируется все время, сортировка кажется случайной,

1 - Как отсортировать массив childs с полем (childs.createdAt)

2 - Как отобразить только эти поля в дочерних элементах (_id / date / creationAt) и эти поля (_id / childs / date) в комментариях массива

query

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

данные

https://mongoplayground.net/p/XTu0yeLTMMr

Как я могу изменить свой запрос? спасибо.

...