让所有层次结构的父项直到mongodb中的叶节点的根

时间:2017-01-15 21:58:23

标签: mongodb mongodb-query

您好我在NoSQL中以下列格式存储文件夹树结构。

Document{{_id=587bedc1da0847d7ad8b7056, name=firstlevel, parent_folder=null}}
Document{{_id=587beddcda0847d7ad8b7057, name=secondlevel, parent_folder=firstlevel}}
Document{{_id=587bedf2da0847d7ad8b7058, name=thirdlevel, parent_folder=secondlevel}}

我需要获得thirdlevel的父母,我的输出应该包含firstlevelsecondlevelthirdlevel(可选,因为我已经知道我在哪个级别) )。任何人都可以建议我需要遵循什么样的模型树结构,或者可以在没有父,子,祖先,路径等模型树结构的情况下完成,

提前致谢。

1 个答案:

答案 0 :(得分:2)

使用当前的Mongo 3.4版本,您可以使用$graphLookup

如果您有以下内容。

{
    "_id": ObjectId("587bedc1da0847d7ad8b7056"),
    "name": "firstlevel",
    "parent_folder": null
} {
    "_id": ObjectId("587beddcda0847d7ad8b7057"),
    "name": "secondlevel",
    "parent_folder": "firstlevel"
} {
    "_id": ObjectId("587bedf2da0847d7ad8b7058"),
    "name": "thirdlevel",
    "parent_folder": "secondlevel"
}

查询所有家长。

db.nodes.aggregate([{
    $graphLookup: {
        from: "nodes",
        startWith: "$name",
        connectFromField: "parent_folder",
        connectToField: "name",
        as: "parents",
    }
}]);

为查询父母thirdlevel

添加一个匹配阶段
{$match:{name:"thirdlevel"}}

示例输出:

{
    "name": "thirdlevel",
    "parents": [{
        "_id": ObjectId("587beddcda0847d7ad8b7057"),
        "name": "secondlevel",
        "parent_folder": "firstlevel"
    }, {
        "_id": ObjectId("587bedc1da0847d7ad8b7056"),
        "name": "firstlevel",
        "parent_folder": null
    }, {
        "_id": ObjectId("587bedf2da0847d7ad8b7058"),
        "name": "thirdlevel",
        "parent_folder": "secondlevel"
    }]
}