如何使用mongoose通过匹配对象数组中的值来聚合mongodb数据?

btqmn9zl  于 2023-08-06  发布在  Go
关注(0)|答案(1)|浏览(101)

Hi我在mongodb中有以下数据

{
  "_id": {
    "$oid": "64ca10afd4b19833b87298d4"
  },
  "orderId": "597628170576",
   "items": [
    {
      "_id": {
        "$oid": "64ca10b2d4b19833b87298d7"
      },
      "item_id": "ITEM_004",
      "title": "Sampoo",
      "subtotal": 28,
      "total": 30.32,
      "tax": 2.32,
      "discount": 20
    }
  ]
},
{
  "_id": {
    "$oid": "64ca10afd4b19833b87298d4"
  },
  "orderId": "597628170576",
  "items": [
    {
      "_id": {
        "$oid": "64ca10b2d4b19833b87298d7"
      },
      "item_id": "ITEM_004",
      "title": "Sampoo",
      "quantity": 4,
      "tax": 2.32,
      "discount": 20
    }
  ]

}

字符串
我有一个要求,我必须匹配items.tax>0并显示
下面是我尝试的聚合

model.aggregate([
          {
            $match: {
              item: {
                $elemMatch: {
                  tax: { $gt: 0 }
                }
              }
            }
          },
          { $group: { _id: null, count: { $sum: 1 } } }
        ])


但这似乎给予我空值,请让我知道如何进一步进行

uqxowvwt

uqxowvwt1#

在你编辑之后,我注意到条目确实是嵌套的,如果是这样,问题可能是属性是“条目”(复数形式),而你正在寻找一个不存在的属性“条目”。
这样应该可以

model.aggregate([
  {
     $match: {
       items: {
          $elementMatch: {
            tax: { $gt: 0 }
          }
       }
     }
  },
  { $group: { _id: null, count: { $sum: 1 } } }
])

字符串
或更短:

model.aggregate([
  {
     $match: {
       "items.tax": { $gt: 0 }
     }
  },
  { $group: { _id: null, count: { $sum: 1 } } }
])


更多信息:https://www.mongodb.com/docs/manual/reference/operator/query/elemMatch/#examples

相关问题