一个用户可以添加多个产品,而多个用户可以请求该产品。对于每个产品,我都有一个对象数组,其中包含请求该产品的用户的用户ID。我试图获取所有请求的总和,例如:(为简单起见,将对象ID组成,我知道它们不现实)
下面我有2个产品,一个产品有一个请求,第二个产品有2个请求,因此该用户有2个产品和3个请求。我正在尝试获取3的值。
_id: ObjectId("12323443463")
userId: ObjectId("88888888")
title: "Product 1"
requests: Array
0: Object
_id: ObjectId("89766876")
userId: ObjectId("09795675")
_id: ObjectId("9878754")
userId: ObjectId("88888888")
title: "Product 2"
requests: Array
0: Object
_id: ObjectId("89766876")
userId: ObjectId("09795675")
1: Object
_id: ObjectId("66445547676")
userId: ObjectId("7765543434")
我尝试过:
Product.aggregate([
{ $match: { userId: req.user._id }},
{ $group: { _id: "$requests.userId", totals: { $sum: 1 } } }
])
如果我用console.log记录,则会得到:
[ { _id: [ 5c375260a6f58308e510711a, 5c25cddc73d10c02a75b3d55 ],
totals: 1 },
{ _id: [ 5c375260a6f58308e510711a ], totals: 1 } ]
这是正确的,因为它为我提供了请求该产品的用户的3个ID。但是,我真的只希望查询结果为3。