Mongodb Mongo总计$group发行
我有以下模型数据:Mongodb Mongo总计$group发行,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有以下模型数据: var orders = [{ _id: 'order_1' users: [{ name: 'Bob' _id: 'user_1', company: 'company_1' }, { name: 'John' _id: 'user_3', company: 'company_2' }] }, { _id: 'order_2' users: [{ name: 'Mary' _id: 'u
var orders = [{
_id: 'order_1'
users: [{
name: 'Bob'
_id: 'user_1',
company: 'company_1'
}, {
name: 'John'
_id: 'user_3',
company: 'company_2'
}]
}, {
_id: 'order_2'
users: [{
name: 'Mary'
_id: 'user_2',
company: 'company_1'
}]}];
使用聚合框架,我希望最终得到:
[{
_id: 'user_1',
order: 'order_1',
company: 'company_1'
}, {
_id: 'user_2',
order: 'order_2',
company: 'company_1'
}];
守则:
return Order.aggregateAsync([{
$unwind: '$users'
}, {
$match: {
'users.company': 'company_1'
}
}, {
$project: {
id: '$users._id',
order: '$_id',
company: '$users.company',
}
}, {
$group: {
_id: "$users"
}
}]);
但有些事情并不完全正确。一旦我添加$group参数,我就会丢失结果中的所有数据,最后只得到数组中的用户ID
[
{ _id: 'user_1' },
{ _id: 'user_2' }
]
我如何获得我在结果中预测的所有数据 对行进行分组后,aggregate无法确定需要哪一行,除非您指定它。 使用
$group
您甚至不需要$project
。此查询可能会提供您所需的信息:
return Order.aggregateAsync([{
$unwind: '$users'
}, {
$match: {
'users.company': 'company_1'
}
}, {
$group: {
_id: "$users",
id: { $first: '$users._id' },
order: { $first: '$_id' },
company: { $first: '$users.company' },
}
}]);
我基本上只是将投影移动到分组下,在分组中可以使用任何类似于$first
、$last
或其他表达式的内容