首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mongodb聚合中如何在$match后使用$group

在mongodb聚合中如何在$match后使用$group
EN

Stack Overflow用户
提问于 2022-11-30 13:30:34
回答 1查看 35关注 0票数 0

我有4种产品。我想知道有product-4product-2的用户的数量

样本数据:

代码语言:javascript
复制
[
  {
    "user_id": 1,
    "product_type": "product-1"
  },
  {
    "user_id": 1,
    "product_type": "product-4"
  },
  {
    "user_id": 1,
    "product_type": "product-4"
  },
  {
    "user_id": 2,
    "product_type": "product-1"
  }
]

用户-1有两个product-4和一个product-1 (计算值为2)。

用户-2只有product-1,但没有product-4 (因此不算)

我就是这么努力的

代码语言:javascript
复制
db.collection.aggregate([
  {
    $match: {
      product_type: {
        $in: [
          "product-1​",
          "product-2",
        ],
      },
    },
  },
  {
    $group: {
      _id: "$user_id",
    },
  },
  {
    $match: {
      user_id: { $in: "$_id"}, // I want to use $group's result in here
      product_type: "product-4",
    },
  }
]);

预期成果如下:

代码语言:javascript
复制
[
  {
    "_id": 1,
    "count": 2
  },
  {
    "_id": 2,
    "count": 0
  }
]

注意:我没有后端,只能使用mongodb。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-30 13:43:51

这能回答你的问题吗?

代码语言:javascript
复制
db.collection.aggregate([
  {$group: {_id: "$user_id", data: {$push: "$product_type"}}},
  {$match: {$expr: {$or: [
          {$in: ["product-1", "$data"]},
          {$in: ["product-2", "$data"]}
        ]}}},
  {$project: {
      count: {
        $size: {
          $filter: {
            input: "$data",
            cond: {$eq: ["$$this", "product-4"]}
          }
        }
      }
  }}
])

看看它如何在操场实例上工作

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74628599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档