gpt4 book ai didi

node.js - 如何获取登录用户的对象数组的总和

转载 作者:太空宇宙 更新时间:2023-11-04 00:01:59 25 4
gpt4 key购买 nike

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

关于node.js - 如何获取登录用户的对象数组的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54223631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com