统计一个月内子文档mongodb交易中的产品数量

下面只是我的 mongodb 文档的一个例子。和 sum 当从产品文档中选择交易 175 时,我期望 August 中每个交易文档中的产品数量

products 文档中的预期结果

[
 {
   "_id":"61012014f7416b0a41db7055","name":"MIE","retailPrice":20000,"qtyInTransaction":175
 }
]

这是我的文件

products 文档

[
 {
   "_id":"61012014f7416b0a41db7055","description":"PRODUK BARU",}
]

producutInTransaction 文档

 [
  {
    "_id":"6106a3b1f1bbd62640c7b404","transactionDate":{"$date":"2021-08-01T00:00:00.000Z"},"productsInTransactions":
         [
            {
             "_id":"6106a3cff1bbd62640c7b405","productId":"61012014f7416b0a41db7055"},"qty":100,"price":5000,"description":"asdn"
           },{
             "_id":"6106a3cff1bbd62640c7b406","qty":50,"description":"asdn"
           }

       ]
   },{
    "_id":"6106a3b1f1bbd62640c7b4007","productsInTransactions":
         [
            {
             "_id":"6106a3cff1bbd62640c7b407","qty":25,]
   }

]

感谢您的帮助,对不起我的英语

lijinhui555 回答:统计一个月内子文档mongodb交易中的产品数量

您可以使用此查询(在您想要的任何内容上添加 [1,2,3].filter(x => x > 1).map(x => x * 10) 值:

  • 第一个 ISODate$match 组成,它必须“大于或等于”期望的日期。在这里你必须使用 JS 计算你的日期并使用变量。
  • 然后使用 transactionData $unwind 字段来解构数组。
  • productsInTransactions$groupproductId $sum 值组成。
  • 稍后,qty 与“产品”集合“加入”并生成具有所需值的 $lookup 字段。
  • 并且至少 data 只显示您想要的字段。
$project

示例here

结果是:

db.productInTransaction.aggregate([
  {
    "$match": {
      "transactionDate": {
        "$gte": ISODate("2021-07-01T00:00:00.000Z")
      }
    }
  },{
    "$unwind": "$productsInTransactions"
  },{
    "$group": {
      "_id": "$productsInTransactions.productId","qty": {
        "$sum": "$productsInTransactions.qty"
      }
    }
  },{
    "$lookup": {
      "from": "product","localField": "_id","foreignField": "_id","as": "data"
    }
  },{
    "$project": {
      "name": {
        "$arrayElemAt": [
          "$data.name",0
        ]
      },"retailPrice": {
        "$arrayElemAt": [
          "$data.retailPrice","qtyInTransaction": "$qty"
    }
  }
])
本文链接:https://www.f2er.com/1709.html

大家都在问