我是mongodb的新手,正在尝试聚合。我需要以下问题的帮助。 我有这样的收藏
{_id: 1, parentId: null, name: 'foo'},
{_id: 2, parentId: '1', name: 'boo'},
{_id: 3, parentId: '2', name: 'koo'},
{_id: 4, parentId: '3', name: 'coo'}
{_id: 5, parentId: '4', name: 'loo'}
我想执行聚合并获取 id 的父母和子项列表。我怎样才能做到这一点?提前谢谢。
我尝试了 mongodb 的图形查找,但没有按预期得到结果。我试过这个。
db.files.aggregate([ { $graphLookup: {
from : 'files',
startWith: '$id',
connectFromField: 'parentId',
connectToField: 'id',
as: 'parents'
}}])
我需要的输出格式是:
{
id: id,
parents: [{id, name}],
children: []
}
一旦你把parentId
字段也更改为整数,为了匹配_id
字段,你可以这样做:
db.files.aggregate([{
$graphLookup: {
from : 'files',
startWith: '$parentId',
connectFromField: 'parentId',
connectToField: '_id',
as: 'parents'
}
}, {
$graphLookup: {
from : 'files',
startWith: '$_id',
connectFromField: '_id',
connectToField: 'parentId',
as: 'children'
}
}])
根据您的评论,您似乎希望在开始时添加一个$match
阶段以查询特定_id
,并在结束时添加一个$project
阶段以将输出修剪为所需的内容:
db.files.aggregate([{
$match: {
_id: 3
}
}, {
$graphLookup: {
from : 'files',
startWith: '$parentId',
connectFromField: 'parentId',
connectToField: '_id',
as: 'parents'
}
}, {
$graphLookup: {
from : 'files',
startWith: '$_id',
connectFromField: '_id',
connectToField: 'parentId',
as: 'children'
}
}, {
$project: {
"parents._id": 1,
"parents.name": 1,
"children": 1,
}
}])