首页 > 解决方案 > 如何使用 MongoDB 获取每个仓库的总数量?

问题描述

我有一个包含以下文件的集合:

{ item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
{ item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },
{ item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },
{ item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },
{ item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }

想要输出为

{ "_id" : "A", totalQty : 105 }
{ "_id" : "B", totalQty :35 }
{ "_id" : "C", totalQty : 55 }

试着做 :

db.inventory.aggregate([
    {$group : {_id: "$instock.warehouse", totalQty : {$sum: "$instock.qty"}}}
])

但它不起作用。可能有一个项目没有instock字段。

如果我们希望 ' ' 的每个元素instock作为新集合(' ')中的单独文档,该怎么办inventoryNew

该集合来自https://docs.mongodb.com/manual/tutorial/query-array-of-documents/

标签: mongodbmongodb-query

解决方案


你是在正确的方式只需要使用$unwind before解构instock数组,$group

  • $unwind解构
  • $groupinstock.warehouse然后总结instock.qty你已经做过的事情
db.collection.aggregate([
  { $unwind: "$instock" },
  {
    $group: {
      _id: "$instock.warehouse",
      totalQty: { $sum: "$instock.qty" }
    }
  }
])

游乐场:https ://mongoplayground.net/p/WIHu4KaEq3l


推荐阅读