Node.js 使用猫鼬分组
我有一组对象:Node.js 使用猫鼬分组,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有一组对象: [ {type: 'type1', user: 'user1', order: 'order-10', price: 100}, {type: 'type1', user: 'user1', order: 'order-20', price: 200}, {type: 'type2', user: 'user2', order: 'order-30', price: 300}, {type: 'type2', user: 'user1', order: 'order-40', p
[
{type: 'type1', user: 'user1', order: 'order-10', price: 100},
{type: 'type1', user: 'user1', order: 'order-20', price: 200},
{type: 'type2', user: 'user2', order: 'order-30', price: 300},
{type: 'type2', user: 'user1', order: 'order-40', price: 400}
]
是否可以按类型分组,在类型组内,按用户分组,如下所示:
[
{_id: 'type1', users: [
{user: 'user1', orders: [{order: 'order-10', price: 100}, {order: 'order-20', price: 200}]}
]},
{_id: 'type2', users: [
{user: 'user1', orders: [{order: 'order-40', price: 400}]},
{user: 'user2', orders: [{order: 'order-30', price: 300}]}
]}
]
我尝试执行以下操作,但未按用户分组:
db.aggregate([
{ $match: { date: { $gte: new Date(req.body.date.begin), $lt: end } } },
{ $lookup: { from: 'orders', localField: 'order', foreignField: '_id', as: 'order' } },
{ $unwind: "$order" },
{ $lookup: { from: 'clients', localField: 'user', foreignField: '_id', as: 'user' } },
{ $unwind: "$user" },
{
$group: {
_id: {
type: '$type',
user: '$user.name',
order: '$order'
},
orders: {
$push: { order: '$order', price: '$price' }
}
}
}, {
$group: {
_id: '$_id.type',
users: { $push: { user: '$_id.user', orders: '$orders' } }
}
}
]
不完全是我需要的。此解决方案将返回用户和订单的单个数组。但是谢谢你的尝试
db.aggregate([{
"$unwind: "$arrayOfObject"
},{"$group":{
"_id":"$type",
"users":{
"$addToSet":"$user",
},
"orders":{
"$addToSet":"$orders"
},
"price":{
"$addToSet":"$price"
}
}}])