mongodb中的父子查询

mongodb中的父子查询,mongodb,mongoose,mongodb-query,Mongodb,Mongoose,Mongodb Query,我收集了以下数据: [ { _id: "id1", parentId: null, text: "text 1" }, { _id: "id2", parentId: null, text: "text 2" }, { _id: "id3", parentId: null, text: "text 3" }, { _id: "id4", parentId: "id1", t

我收集了以下数据:

[
  {
    _id: "id1",
    parentId: null,
    text: "text 1"
  },
  {
    _id: "id2",
    parentId: null,
    text: "text 2"
  },
  {
    _id: "id3",
    parentId: null,
    text: "text 3"
  },
  {
    _id: "id4",
    parentId: "id1",
    text: "text 4"
  },
  {
    _id: "id5",
    parentId: "id1",
    text: "text 5"
  },
  {
    _id: "id6",
    parentId: "id2",
    text: "text 6"
  },
  {
    _id: "id7",
    parentId: "id5",
    text: "text 7"
  }
]
我希望每个孩子都像这样跟着父母:

[
  {
    _id: "id1",
    parentId: null,
    text: "text 1"
  },
  {
    _id: "id4",
    parentId: "id1",
    text: "text 4"
  },
  {
    _id: "id5",
    parentId: "id1",
    text: "text 5"
  },
  {
    _id: "id7",
    parentId: "id5",
    text: "text 7"
  },
  {
    _id: "id2",
    parentId: null,
    text: "text 2"
  },
  {
    _id: "id6",
    parentId: "id2",
    text: "text 6"
  },
  {
    _id: "id3",
    parentId: null,
    text: "text 3"
  }
]
但是我在mongodb中没有找到任何关于这个的查询。可能吗? 我将此模式用于存储评论,并且需要这样排序。
对于sql查询,我在youtube上找到了这段视频:

这里有一个使用聚合框架的解决方案:

db.test.aggregate([{
    $addFields: {
        parentIdId: {
            $concat: [{
                $ifNull: [{
                    $toString: "$parentId"
                }, ""]
            }, {
                $toString: "$_id"
            }]
        }
    }
}, {
    $sort: {
        parentIdId: 1
    }
}, {
    $project: {
        parentIdId: 0
    }
}])
结果是:

{"_id":"id1","parentId":null,"text":"text 1","parentIdId":"id1"}
{"_id":"id4","parentId":"id1","text":"text 4","parentIdId":"id1id4"}
{"_id":"id5","parentId":"id1","text":"text 5","parentIdId":"id1id5"}
{"_id":"id2","parentId":null,"text":"text 2","parentIdId":"id2"}
{"_id":"id6","parentId":"id2","text":"text 6","parentIdId":"id2id6"}
{"_id":"id3","parentId":null,"text":"text 3","parentIdId":"id3"}
{"_id":"id7","parentId":"id5","text":"text 7","parentIdId":"id5id7"}
在这个解决方案中,我在查询结果中创建了一个新字段,它是parentId和Id的串联,然后对其进行排序

如果要删除此技术字段,可以添加此管道阶段:

{$project: {parentIdId: 0}}
您的最后一个问题是:

db.test.aggregate([{
    $addFields: {
        parentIdId: {
            $concat: [{
                $ifNull: [{
                    $toString: "$parentId"
                }, ""]
            }, {
                $toString: "$_id"
            }]
        }
    }
}, {
    $sort: {
        parentIdId: 1
    }
}, {
    $project: {
        parentIdId: 0
    }
}])

谢谢,我运行了你的查询,但是我得到了这个错误:``$concat只支持字符串,不支持objectId```你可以使用
$toString
。我将它添加到应答中,我添加了它,但是我得到了这个错误:应答中未识别的表达式'$toString固定谢谢,但是我仍然有这个错误:未识别的表达式'$toString'