2013-03-04 2 views
0

У меня есть трубопровод в mongodb ниже.mangodb group aggregation pipe include 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

ответ

0

_id прилагается, но его нужно было вводить внутри группы иначе после группы, все, что не входит в группу, исключается.

Итак, вот что заставило меня решить эту проблему. Так как мне приходилось получать и другие поля, решение ниже работало отлично.

pipe.push ({$ project: {'name1': 1, isGroup: {$ cond: [{$ eq: ['$ name2', '']}, false, true]}, onlyGroup: 1 , 'objecttype': 1, idd: '$ _ id'}})

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