使用 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
阶段之后使用,作为$lookup
returns一个数组,需要展开它将它转换为对象。
更多信息请阅读Mongodb $lookup documentation,and $project documentation。
希望对您有所帮助。
我需要在 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
阶段之后使用,作为$lookup
returns一个数组,需要展开它将它转换为对象。
更多信息请阅读Mongodb $lookup documentation,and $project documentation。
希望对您有所帮助。