我目前正在研究一个nodejs项目,我使用mongodb作为我的数据库,但我有一个问题。我想使用聚合进行一次调用,该聚合将特定用户订单的总和添加到用户集合中。但我不知道该怎么做。我需要一些建议/帮助,如何实现这一点。请参见下面的对象示例。
用户集合
[
{
_id: 1,
name: "Henry"
},
{
_id: 2,
name: "John"
}
]
订单集合
[
{
_id: 1,
userId: 2
},
{
_id: 2,
userId: 2
},
{
_id: 3,
userId: 1
}
]
猫鼬呼叫后的预期结果
[
{
_id: 1,
name: "Henry",
orderCount: 1
},
{
_id: 2,
name: "John",
orderCount: 2
}
]
查询
- 按userId分组订单,并对orderCount求和
- 查找用户获取用户信息(这里是
name
字段)
PlayMongo
orders.aggregate(
[{"$group": {"_id": "$userId", "orderCount": {"$sum": 1}}},
{"$lookup":
{"from": "users",
"localField": "_id",
"foreignField": "_id",
"as": "users"}},
{"$set": {"name": {"$arrayElemAt": ["$users.name", 0]}}},
{"$unset": ["users"]}])
如果你的用户有比name
更多的字段,替换$set
这个
{"$replaceRoot":
{"newRoot": {"$mergeObjects": ["$$ROOT" , {"$arrayElemAt": ["$users", 0]}]}}}