如何解决MongoDB聚合graphlookup子级的父级
我有一些代表文件夹的文件。我想匹配每个文件夹的父文件夹(如果有的话)。
{"_id":{"$oid":"5f8c406fc8c88110e0d927f2"},"name":"A"}
{"_id":{"$oid":"5f8c406fc8c88110e0d927f3"},"parentFolderId":"5f8c406fc8c88110e0d927f2","name":"B"}
即使父子关系更深,对于 A ,我也需要空父文件夹,对于 B ,父级文件夹A 。我试图为此使用GraphLookup,但是它不起作用(每个parentFolder
为空),而且我不知道自己缺少什么:
db.folders.aggregate([
{
$addFields: {
convertedId: { $toString: "$_id" }
}
},{
$graphLookup: {
from: "folders",startWith: "$parentFolderId",connectFromField: "parentFolderId",connectToField: "convertedId",as: "parentFolder",maxDepth: 0,}
}
])
如果分别翻转startWith
,connectFromField
,connectToFields
,则会得到所需的 reverse ,A有一个包含B的数组,B一无所有。
编辑:
通过无效的查找,我得到以下结果:
{ "_id" : ObjectId("5f8c406fc8c88110e0d927f2"),"name" : "A","convertedId" : "5f8c406fc8c88110e0d927f2","parentFolder" : [ ] }
{ "_id" : ObjectId("5f8c406fc8c88110e0d927f3"),"parentFolderId" : "5f8c406fc8c88110e0d927f2","name" : "B","convertedId" : "5f8c406fc8c88110e0d927f3","parentFolder" : [ ] }
我需要的是类似的东西
{ "_id" : ObjectId("5f8c406fc8c88110e0d927f2"),"parentFolder" : [ { "_id" : ObjectId("5f8c406fc8c88110e0d927f2"),"convertedId" : "5f8c406fc8c88110e0d927f2" } ] }
我从正式的“ reportsTo”示例中看到的唯一区别是,我使用ID字段来匹配文档,但这应该不是问题,因为我没有使用ObjectID:{{3} }
解决方法
这就是您要寻找的。我不需要其他convertedId
字段。所以我没有添加。如果您愿意,我也可以添加。但是我认为那将是多余的信息。
db.collection.aggregate([
{
$graphLookup: {
from: "collection",startWith: {
$toObjectId: "$parentFolderId"
},connectFromField: "parentFolderId",connectToField: "_id",as: "parentFolder",maxDepth: 0,}
}
])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。