mongodb-在数组中获取对象的总和

发布于 2025-01-18 20:00:41 字数 540 浏览 0 评论 0 原文

您好,我对 MongoDB 很陌生,我正在尝试使用 document.collection.find$add 功能获取以下 MongoDB 数据的总价和促销:

数据:

[
  {
    "catalog":"A",
    "book":[
    {
      "title":"Mermaid yang terdampar",
      "price":90000,
      "promo":15000
    },
    {
      "title":"Srigala berbulu domba",
      "price":30000,
      "promo":15000
    }
  }
]

我的预期结果是这样的:

[
  {
    "catalog": "A",
    "totalPrice": 140000,
    "totalPromo": 32000
  },
]

有人遇到过类似的问题吗?我对这个查询感到困惑:)

Hi I'm very new to MongoDB, I'm trying to get the total price and promo of the below MongoDB data with document.collection.find and $add functionality:

Data:

[
  {
    "catalog":"A",
    "book":[
    {
      "title":"Mermaid yang terdampar",
      "price":90000,
      "promo":15000
    },
    {
      "title":"Srigala berbulu domba",
      "price":30000,
      "promo":15000
    }
  }
]

And my expected result would be sth like this:

[
  {
    "catalog": "A",
    "totalPrice": 140000,
    "totalPromo": 32000
  },
]

Does anybody ever encounter a similar issue? I'm confused with the query :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

爱你是孤单的心事 2025-01-25 20:00:41

对于 .find()查询,您可以直接使用 $ sum operator。

db.collection.find({},
{
  catalog: 1,
  totalSum: {
    $sum: "$book.price"
  },
  totalPromo: {
    $sum: "$book.promo"
  }
})

示例mongo playground

For .find() query, you can direct use the $sum operator.

db.collection.find({},
{
  catalog: 1,
  totalSum: {
    $sum: "$book.price"
  },
  totalPromo: {
    $sum: "$book.promo"
  }
})

Sample Mongo Playground

柠檬色的秋千 2025-01-25 20:00:41

使用聚合

db.getCollection('myCollection').aggregate([
    { "$group": {
        "_id": "$tempId",
        "totalPrice": { 
            "$sum": { "$sum": "$book.price" } 
        },
        "totalPromo": { 
            "$sum": { "$sum": "$book.promo" } 
        }
    } }
])

use aggregate

db.getCollection('myCollection').aggregate([
    { "$group": {
        "_id": "$tempId",
        "totalPrice": { 
            "$sum": { "$sum": "$book.price" } 
        },
        "totalPromo": { 
            "$sum": { "$sum": "$book.promo" } 
        }
    } }
])
脱离于你 2025-01-25 20:00:41

使用

db.getCollection('catlog').aggregate([{ 
    $group: {
        _id: "$_id",
        catalog: { $first: "$catalog" },
        totalPrice: { "$sum": { $sum: "$book.price" } },
        totalPromo: { "$sum": { $sum: "$book.promo" } }
    }
}])

输出将是:

{
    "_id" : ObjectId("6247b33cffc5b6f714769fbb"),
    "catalog" : "A",
    "totalPrice" : 120000,
    "totalPromo" : 30000
}

Using $group (aggregation)

db.getCollection('catlog').aggregate([{ 
    $group: {
        _id: "$_id",
        catalog: { $first: "$catalog" },
        totalPrice: { "$sum": { $sum: "$book.price" } },
        totalPromo: { "$sum": { $sum: "$book.promo" } }
    }
}])

Output will be:

{
    "_id" : ObjectId("6247b33cffc5b6f714769fbb"),
    "catalog" : "A",
    "totalPrice" : 120000,
    "totalPromo" : 30000
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文