这是我的问题:
型:
{ 应用程序: "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"}
}
}
]