2013-03-04 146 views
0

我在下面的MongoDB中有一个管道。mongodb组聚合管道包括objectId(_id)

pipeline.push({ $project: { 'name1': 1, isGroup: { $cond: [{ $eq: ['$name2', '']}, false, true]}, onlyGroup: 1, 'objecttype':1 } }) 
pipeline.push({ $group: { _id: { 'name1': '$name1', isGroup: '$isGroup', onlyGroup: '$onlyGroup', 'objecttype': '$objecttype'} } }) 
pipeline.push({ $sort: { _id: 1 } }) 
pipeline.push({ $project: { 'name1': '$_id.name1', isGroup: '$_id.isGroup', 'objecttype': '$_id.objecttype', onlyGroup: '$_id.onlyGroup' } }) 
break; 

正如你所看到的,输出是name1,isGroup,objecttype,onlyGroup。

我想添加_id作为其中一个输出。我如何使它发生?

+0

'_id'默认包含在'$ project'中,所以它应该已经在那里了。 – JohnnyHK 2013-03-04 21:05:52

回答

0

_id被包括在内,但它必须被带到组内,否则在组之后,没有被包括在组中的所有内容都被排除。

所以这里是什么让我解决这个问题。因为我也得到其他领域,下面的解决方案完美地工作。 pipeline.push({$ project:{'name1':1,isGroup:{$ cond:[{$ eq:['$ name2','']},false,true]},onlyGroup:1 ,'objecttype':1,idd:'$ _ id'}})

pipeline.push({$ group:{_id:{'name1':'$ name1',isGroup:'$ isGroup',onlyGroup: '$ onlyGroup'},objecttype:{$ push:'$ objecttype'},idd:{$ push:'$ idd'}}})