使用 mongodb 展平 Parent child collection

Flatten Parent child collection using mongodb

我需要在 mongodb 中展平我的 parent child collection 。这类似于 sql 的问题:

我的collection就像 category: {_id, type, name, parent:(映射到自身即类别 collection) )}

并且 child 的当前深度为 3,类型为 L1、L2、L3

结果将包含以下字段:(L1_id、L1_name、L2_id、L2_name、L3_id、L3_name)

请帮忙

您可以使用 mongodb aggregation pipeline 来实现同样的效果。更具体地说,您可以使用 $lookup 两次来填充 parent 及其 parent,最后使用 $project 来展平结构。

试试这个:

Category.aggregation([{
    $lookup : {
        from :"categories",
        localField : "parent",
        foreignField : "_id",
        as  :"parent"
    }
},{
    $unwind : "$parent"
},{
    $lookup : {
        from :"categories",
        localField : "parent.parent",
        foreignField : "_id",
        as  :"parent.parent"
    }
},{
    $unwind : "$parent.parent"
},{
    $project : {
        l1_id  : "$_id",
        l1_name : "$name",
        l2_id : "$parent._id", 
        l2_name : "$parent.name" ,
        l3_id : "$parent.parent._id", 
        l2_name : "$parent.parent.name" 
    }
}]).then(result => {
    // result will have l1_id, l1_name, l2_id, l2_name, l3_id, l3_name
    // where l2 is the parent,
    // and l3 is the parent of parent 
}).

注意:$unwind$lookup阶段之后使用,作为$lookupreturns一个数组,需要展开它将它转换为对象。

更多信息请阅读Mongodb $lookup documentation,and $project documentation

希望对您有所帮助。