使用mongodb展平父子集合

使用mongodb展平父子集合,mongodb,mongoose,mongoose-schema,mongoose-populate,Mongodb,Mongoose,Mongoose Schema,Mongoose Populate,我需要在mongodb中展平我的父子收藏。这类似于在以下位置对sql提出的问题: 我的收藏就像 类别:{u id,类型,名称,父项:(映射到self,即类别集合))} 子对象的当前深度为3,类型为L1、L2、L3 结果将包含以下字段:(L1_id、L1_名称、L2_id、L2_名称、L3_id、L3_名称) 请提供帮助您可以使用mongodb聚合管道实现同样的功能。更具体地说,您可以使用$lookup两次来填充父项及其父项,最后使用$project来展平结构 试试这个: Category.ag

我需要在mongodb中展平我的父子收藏。这类似于在以下位置对sql提出的问题:

我的收藏就像 类别:{u id,类型,名称,父项:(映射到self,即类别集合))}

子对象的当前深度为3,类型为L1、L2、L3

结果将包含以下字段:(L1_id、L1_名称、L2_id、L2_名称、L3_id、L3_名称)


请提供帮助

您可以使用
mongodb聚合管道
实现同样的功能。更具体地说,您可以使用
$lookup
两次来填充
父项
及其
父项
,最后使用
$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
阶段之后使用,因为
$lookup
返回一个数组,我们需要将其展开以将其转换为对象

欲了解更多信息,请阅读,和


我希望这对你有所帮助。

非常感谢。多次查找和展开效果非常好。唯一的问题是输出。我做了一个小小的改变。实际上,第一次查找以l3结束,然后是l2,最后是l1。。。所以,项目,;{….}标签需要反转。