使用mongodb展平父子集合
我需要在mongodb中展平我的父子收藏。这类似于在以下位置对sql提出的问题: 我的收藏就像 类别:{u id,类型,名称,父项:(映射到self,即类别集合))} 子对象的当前深度为3,类型为L1、L2、L3 结果将包含以下字段:(L1_id、L1_名称、L2_id、L2_名称、L3_id、L3_名称)使用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聚合管道
实现同样的功能。更具体地说,您可以使用$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。。。所以,项目,;{….}标签需要反转。