使用Mongo聚合框架的共现计数

随风而行

我有与客户互动的产品的此文档(没有重复的产品):

{ "client_interactions": [{"productType": "A", "productId": "1"}, {"productType": "A", "productId": "2"}, {"productType": "B", "productId": "9"}]}
{ "client_interactions": [{"productType": "A", "productId": "1"}, {"productType": "A", "productId": "2"}]}
{ "client_interactions": [{"productType": "A", "productId": "1"}, {"productType": "A", "productId": "3"}, {"productType": "C", "productId": "10"}]}

我想计算类型“ A”的每个产品的同现计数,如果客户与两个产品同时交互,则产品“ 1”与产品“ 2”同时存在。

就像是:

{ "co-ocurrences-count" : { "1" : [{ "2": 2}, { "3" : 1}]}, { "2" : [{ "1": 2}]}, { "3" : [{ "1": 1}]}}

我有一个使用map-reduce javascript函数的解决方案,但我真的希望它使用MongoDB聚合框架来实现,这可能吗?

提前致谢。

米克尔

聚合时间很长,但是可以正常工作。这个想法是,您需要(x,y)基于client_interactions数组构建对可以使用$ reduce$ map来完成然后,您需要运行$ unwind和几个$ group阶段来“缠绕”汇总数据。您还需要$ arrayToObject动态生成密钥。

db.collection.aggregate([
    {
        $addFields: {
            "client_interactions": {
                $filter: { input: "$client_interactions", cond: { $eq: [ "$$this.productType", "A" ] } }
            }
        }
    },
    {
        $project: {
            a: {
                $reduce: {
                    input: "$client_interactions",
                    initialValue: [],
                    in: {
                        $concatArrays: [
                            "$$value",
                            { $map: { input: "$client_interactions", as: "c",  in: { x: "$$this.productId", y: "$$c.productId" } } }
                        ]
                    }
                }
            }
        }
    },
    {
        $unwind: "$a"
    },
    {
        $match: {
            $expr: {
                $ne: [ "$a.x", "$a.y" ]
            }
        }
    },
    {
        $sort: {
            "a.x": 1,
            "a.y": 1
        }
    },
    {
        $group: {
            _id: "$a",
            count: { $sum: 1 }
        }
    },
    {
        $group: {
            _id: "$_id.x",
            arr: { $push: { k: "$_id.y", v: "$count" } }
        }
    },
    {
        $group: {
            _id: null,
            "co-ocurrences-count": { $push: { k: "$_id", v: { $arrayToObject: "$arr" } } }
        }
    },
    {
        $project: {
            _id: 0,
            "co-ocurrences-count": { $arrayToObject: "$co-ocurrences-count" }
        }
    }
])

蒙哥运动场

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Pandas Dataframe中的共现计数

来自分类Dev

Pandas Dataframe中的共现计数

来自分类Dev

使用聚合框架获取Mongodb中的游标计数

来自分类Dev

使用 MongoDB 中的聚合框架进行分组和计数

来自分类Dev

使用聚合框架将SQL查询转换为mongo

来自分类Dev

使用 mongo 聚合框架计算每个用户的数据

来自分类Dev

Mongo聚合游标和计数

来自分类Dev

Mongo计数聚合返回0

来自分类Dev

查找单词共现

来自分类Dev

Mongodb 中的共现

来自分类Dev

使用二元组创建共现矩阵

来自分类Dev

Spark:计数共现-对大型馆藏进行有效多遍过滤的算法

来自分类Dev

R中的共现图

来自分类Dev

mongo聚合组,内部组/数组计数

来自分类Dev

在MongoDB中使用聚合框架按特定的嵌套字段值对文档进行计数

来自分类Dev

使用聚合框架将值数组简化为具有其计数的对象

来自分类Dev

如何在Mongo聚合框架中使用任意函数添加计算字段?

来自分类Dev

如何在mongo DB中使用聚合来进行多层计数细分?

来自分类Dev

使用CSV文件作为共现矩阵使用neworkx绘制图形

来自分类Dev

使用Redis计算给定时间范围内的共现次数

来自分类Dev

在python中使用窗口大小计算的按比例缩放的共现矩阵

来自分类Dev

在mongo db聚合中使用$ not

来自分类Dev

在python熊猫中构造共现矩阵

来自分类Dev

熊猫:与get_dummies的共现矩阵

来自分类Dev

R共现矩阵水平数据

来自分类Dev

计算文件文本中的共现

来自分类Dev

Numpy:填充共现矩阵的最快方法

来自分类Dev

段落内的R字共现频率

来自分类Dev

在hadoop中运行共现算法