首页 文章

Mongodb聚合计数数组/集大小

提问于
浏览
12

这是我的问题:

模型:

{application:“abc”,date:Time.now,status:“1”user_id:[id1,id2,id4]} {application:“abc”,date:Time.yesterday,status:“1”,user_id: [id1,id3,id5]} {application:“abc”,date:Time.yesterday-1,status:“1”,user_id:[id1,id3,id5]}

我需要在一段时间内计算user_id的唯一数量 .

预期结果:

{application:“abc”,status:“1”,unique_id_count:5}

我目前正在使用聚合框架并计算mongodb之外的ID .

{$ match:{application:“abc”}},{$ unwind:“$ users”},{$ group:{_ id:{status:“$ status”},users:{$ addToSet:“$ users” }}}

我的用户ID数组非常大,所以我必须迭代日期或者我将获得最大文档限制(16mb) .

我也可以分组

{year:{$ year:“$ date”},month:{$ month:“$ date”},day:{$ dayOfMonth:“$ date”}

但我也得到了文件大小限制 .

是否可以计算mongodb中的设置大小?

谢谢

2 回答

  • 2

    以下内容将返回每个应用程序的uniqueUsers数 . 这将通过使用mongodb的管道功能将组操作应用于组操作的结果 .

    { $match: { application: "abc" } }, 
    { $unwind: "$users" }, 
    { $group: { _id: "$status", users: { $addToSet: "$users" } } }, 
    { $unwind:"$users" }, 
    { $group : {_id : "$_id", count : {$sum : 1} } }
    

    希望这将通过一个命令以更简单的方式在mongo的以下版本中完成,该命令在投影下给出数组的大小 . {$project: {id: "$_id", count: {$size: "$uniqueUsers"}}} https://jira.mongodb.org/browse/SERVER-4899

    干杯

  • 23

    对不起,我有点迟到了 . 只需对'user_id'进行分组并使用一个简单的组计算结果就可以了,并且不会遇到doc size限制 .

    [
        {$match: {application: 'abc', date: {$gte: startDate, $lte: endDate}}},
        {$unwind: '$user_id'},
        {$group: {_id: '$user_id'}},
        {$group: {_id: 'singleton', count: {$sum: 1}}}
    ];
    

相关问题