sql - 在 MongoDb 查询中执行计算

标签 sql mongodb mongodb-query

假设我有包含的集合

<表类="s-表"> <头> 事件类型 产品 <正文> 查看 热水器 查看 热水器 购买 热水器 查看 电视 查看 电视 查看 电视 购买 电视

第一列有两种类型的字段,(浏览量和购买量) 第二列包含不同种类的产品。 以上数据已经作为集合导入到MongoDB数据库中。我想通过计算产品的最高转化率(100 个客户查看 1 个客户购买 = 1%)来执行数据分析。 通过使用聚合,它需要进行查看和购买的匹配。 然后根据商品计算购买数量,查看分组。 最后,将购买次数除以观看次数。 作为MongoDB的初学者,我发现它很难,想问一下有没有什么办法可以做到?

最佳答案

您可以使用非常标准的管道来实现这一点,我们的策略是将同一产品的 $group 文档,同时使用 $cond 运算符来汇总 View 和购买。最后我们只需要根据需要投影出相关的比例即可。

像这样:

db.collection.aggregate([
  {
    $group: {
      _id: "$product",
      purchases: {
        $sum: {
          $cond: [
            {
              $eq: [
                "$event_type",
                "purchase"
              ]
            },
            1,
            0
          ]
        }
      },
      views: {
        $sum: {
          $cond: [
            {
              $eq: [
                "$event_type",
                "view"
              ]
            },
            1,
            0
          ]
        }
      }
    }
  },
  {
    $project: {
      _id: 0,
      product: "$_id",
      ratio: {
        $divide: [
          "$purchases",
          "$views" // can we have a purchase without a view? can views be 0? if so need to handle this edge case.
        ]
      }
    }
  },
  {
    $sort: {
      ratio: -1
    }
  }
])

Mongo Playground

关于sql - 在 MongoDb 查询中执行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73670319/

相关文章:

mysql - 如何生成一个查询,该查询考虑来自一个表的数据并相应地为mysql中的不匹配字段填充0

java - 如何在 Java 中将 select 构建到查询中

sql - 带有 "or"运算符的 DB2 SQL 正则表达式

javascript - 扩展模式 Mongoose 中的继承方法 "virtual"不起作用

node.js - 如何根据mongodb中的对象属性删除数组中的对象?

arrays - 在 MongoDB 中查找包含专门包含特定文档的数组的文档

java - MongoDB聚合Java API不返回结果

sql - 为指定月份的每一天选择最高值

javascript - MongoDB:SyntaxError:属性列表后缺少}

mongodb - 查找子文档数组是给定搜索词子集的文档