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'}}
        ])
  • 相关阅读:
    andorid自己定义ViewPager之——子ViewPager滑到边缘后直接滑动父ViewPager
    MTK Camera驱动移植
    云计算VDI相关职位招聘
    Android内存泄露之开篇
    关于ping以及TTL的分析
    STL之关联容器的映射底层
    STL非变易算法
    自己主动更新 -- 版本比較(2)
    activiti自己定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义
    合并多个文本文件方法
  • 原文地址:https://www.cnblogs.com/shb190802/p/13644293.html
Copyright © 2011-2022 走看看