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'