Mongodb 聚合计数数组/集大小



这是我的问题:

型:

{ 应用程序: "abc", 日期: Time.now, 状态: "1" user_id: [ id1, id2, id4] }

{ 申请:"ABC",日期:昨天时间,状态:"1",user_id:[ ID1, id3, id5] }

{ 申请:"ABC",日期:时间.昨天-1,状态:"1",user_id:[ ID1, id3, id5] }

我需要计算一段时间内唯一的user_ids数。

预期成果:

{ 应用程序: "ABC",

状态: "1", unique_id_count: 5 }

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

{ $match: { application: "abc" } }, {

$unwind: "$users" }, { $group: { _id: { 状态: "$status"}, 用户: { $addToSet: "$users" } } }

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

我也可以$group

{ 年: { $year: "$date" }, 月份: {

$month: "$date" }, 日: { $dayOfMonth:"$date" }

但我也得到了文档大小的限制。

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

谢谢

以下内容将返回每个应用程序的唯一用户数。这会使用 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

干杯

对不起,我参加聚会有点晚了。 简单地对"user_id"进行分组并使用一个微不足道的组计算结果就可以了,并且不会遇到文档大小限制。

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

使用 $size 获取集合的大小。

[
    {
        $match: {"application": "abc"}
    },
    {
        $unwind: "$user_id"
    },
    {
        $group: {
            "_id": "$status",
            "application": "$application",
            "unique_user_id": {$addToSet: "$user_id"}
        }
    },
    {
        $project:{
            "_id": "$_id",
            "application": "$application",
            "count": {$size: "$unique_user_id"}
        }
    }
]

相关内容

  • 没有找到相关文章

最新更新