首页 > 解决方案 > 如何在聚合中基于正则表达式在mongodb中查找单投影查询中的记录?

问题描述

我有一个名为web_events的集合

数据保存在以下结构中。

{
    "subscriber_id" : "amit",
    "event" : "login"
},
{
    "subscriber_id" : "manish",
    "event" : "login"        
},
{
     "subscriber_id" : "manish",
    "event" : "page_view"        
},
{
    "subscriber_id" : "manish",
    "event" : "add_to_cart"       
}

我想知道有多少用户执行(登录)事件以及有多少用户执行(登录,add_to_cart)这两个事件

输出将类似于 .... ** (login) 事件计数 - 2,用户和 (login,add_to_cart) 事件计数 - 一个查询中有 1 个用户**

我为此使用了两个查询.... 用于登录下面的查询

db.web_events.aggregate([{$group:{_id:{subscriber_id:"$subscriber_id"},myfield:{$push:{$concat:["$event"]}}}},{$project:{"results":{$reduce:{input:"$myfield",initialValue:'',in:{$concat:["$$value","$$this"]}}}}},{$match:{results:{$regex:/.*login.*/}}}]);

登录和 add_tocart

db.web_events.aggregate([{$group:{_id:{subscriber_id:"$subscriber_id"},myfield:{$push:{$concat:["$event"]}}}},{$project:{"results":{$reduce:{input:"$myfield",initialValue:'',in:{$concat:["$$value","$$this"]}}}}},{$match:{results:{$regex:/.*login.*add_to_cart.*/}}}]);

我想在单个投影查询中运行这两个聚合。

任何帮助表示赞赏。

标签: regexmongodbmongodb-queryaggregation-frameworkprojection

解决方案


推荐阅读