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"
             }

    }}])