zoukankan      html  css  js  c++  java
  • mongodb单集合关联查询parent字段内容

    最近在考虑一个树状结构存储。

    使用的mongodb,同一张集合中,使用parentId来做关联。

    查询的时候,希望将parent对应的name作为parentName返回回来。

    集合内容示例

    { "_id" : ObjectId("5f50c5fb8f0d74536bbfb7a4"), "name" : "菜单管理", "parent" : "" }
    { "_id" : ObjectId("5f524416ff216c2cbc554907"), "name" : "频道管理", "parent" : "5f50c5fb8f0d74536bbfb7a4" }
    { "_id" : ObjectId("5f576677d9588f3d78fbdb74"), "name" : "分类管理", "parent" : "5f524416ff216c2cbc554907" }
    { "_id" : ObjectId("5f588b22499cd2538411b98a"), "name" : "发布管理", "parent" : "5f50c5fb8f0d74536bbfb7a4" }
    { "_id" : ObjectId("5f588b85499cd2538411b98b"), "name" : "权限管理", "parent" : "5f50c5fb8f0d74536bbfb7a4" }
    { "_id" : ObjectId("5f588f8358bc0d3e647403a1"), "name" : "菜单管理", "parent" : "5f588b85499cd2538411b98b" }

    期望结果

    将parent的name作为parentName和查询结果一起返回

    { "_id" : ObjectId("5f524416ff216c2cbc554907"), "name" : "频道管理", "parent" : "5f50c5fb8f0d74536bbfb7a4", "parentName": "菜单管理" }

    查询语句

    • $match查询到对应内容
    • $project将parent转换为ObjectID格式的_parent
    • $lookup单表联查查询_parent对应的ID的那一条数据,返回一个数组 _parnetList
    • $unwind 分解这个数组
    • $project再将_parentList.name重命名为parentName
    db.menu.aggregate([
        {$match:{name:'频道管理'}},
        {$project:{'_parent':{$toObjectId:'$parent'},name:1,parent:1}},
        {$lookup:{from:'menu',localField:'_parent',foreignField:'_id',as:'_parentList'}},
        {$unwind:'$_parentList'},
        {$project:{name:1,parent:1,parentName:'$_parentList.name'}}
        ])
  • 相关阅读:
    python开发环境安装
    python文件I/O
    python字符串方法以及注释
    python列表
    php: Can't use function return value in write context
    Notice : brew install php70
    对web开发从业者的发展方向的思考
    关于微信跨号支付
    MySQL触发器写法
    MySQL慢查询日志
  • 原文地址:https://www.cnblogs.com/shb190802/p/13644293.html
Copyright © 2011-2022 走看看