Mongodb聚合计数数组/集大小

use*_*059 12 mongodb aggregation-framework

这是我的问题:

模型:

{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中的设置大小?

谢谢

cub*_*buk 23

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

{ $match: { application: "abc" } }, 
{ $unwind: "$users" }, 
{ $group: { _id: "$status", users: { $addToSet: "$users" } } }, 
{ $unwind:"$users" }, 
{ $group : {_id : "$_id", count : {$sum : 1} } }
Run Code Online (Sandbox Code Playgroud)

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

干杯

  • 这是在2.5.3版本(当前的开发版本)中添加的 (3认同)