如何获取登录用户的对象数组的总和

用户名

一个用户可以添加多个产品,而多个用户可以请求该产品。对于每种产品,我都有一个对象数组,其中包含请求该产品的用户的用户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的值。

阿什

您可以使用以下汇总

Product.aggregate([
  { "$match": { "userId": req.user._id }},
  { "$group": { "_id": null, "totals": { "$sum": { "$size": "$requests" } } } }
])

基本上你需要$sum$size的的requests数组

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章