在mongoose中添加订单收集到用户收集的订单总和



我目前正在研究一个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]}]}}}

最新更新