Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mongodb聚合框架按数组长度分组_Mongodb_Mapreduce_Aggregation Framework - Fatal编程技术网

使用mongodb聚合框架按数组长度分组

使用mongodb聚合框架按数组长度分组,mongodb,mapreduce,aggregation-framework,Mongodb,Mapreduce,Aggregation Framework,我有一个类似这样的收藏: { “_id”:“id0”, “姓名”:“…”, “保存的东西”:[ { ... }, { ... }, { ... }, ] } { “_id”:“id1”, “姓名”:“…”, “保存的东西”:[ { ... }, ] } { “_id”:“id2”, “姓名”:“…”, “保存的东西”:[ { ... }, ] } 等等 我想使用mongodb的聚合框架得出一个直方图结果,告诉多少用户有一定数量的已保存的内容。例如,对于上面的数据集,它可以返回如下内容: {u

我有一个类似这样的收藏:

{
“_id”:“id0”,
“姓名”:“…”,
“保存的东西”:[
{ ... },
{ ... },
{ ... },
]
}
{
“_id”:“id1”,
“姓名”:“…”,
“保存的东西”:[
{ ... },
]
}
{
“_id”:“id2”,
“姓名”:“…”,
“保存的东西”:[
{ ... },
]
}
等等

我想使用mongodb的聚合框架得出一个直方图结果,告诉多少用户有一定数量的
已保存的内容。例如,对于上面的数据集,它可以返回如下内容:

{u id:1,“count:2},
{u id:3,“count:1}
我尝试过各种聚合函数的组合,如下面的一个,但没有一个是正确的。(我觉得我在这件事上大错特错。)

collection.aggregate([
{$REWIND:“$saved_things”},
{$group:“$\U id”,计数:{$sum:1}},
{$group:“$count”,编号:{$sum:1}},
{$sort:{number:-1}}
],函数(错误,结果){
控制台日志(结果);
});

Mongo的聚合框架可以实现这一点吗?还是使用map reduce函数更好?

好的,明白了!我们开始吧。聚合管道基本上是:

{
    $unwind: "$saved_things"
},
{
    $group: {
        _id: "$_id",
        size: {
            $sum: 1
        }
    }
},
{
    $group: {
        _id: "$size",
        frequency: {
            $sum: 1
        }
    }
},
{
    $project: {
        size: "$_id",
        frequency: 1,
        _id: 0
    }
}
展开
保存的东西
数组,然后按文档
\u id
分组并计数,这样就可以得到数组大小。现在很简单,按
大小分组并计算频率。使用project将
\u id
字段重命名为
size

您可以使用$size键 范例


有多少用户拥有一定数量的已保存内容子集合是什么意思?给定一个
保存的东西
,您想知道哪些用户有
保存的东西
,以及有多少?是吗?嗯,我的措辞似乎有点混乱,对不起!我认为示例输出最好地描述了我正在寻找的内容,但我将再次尝试描述它。我想为集合中的每个用户获取
saved_things
中的对象数,并聚合该计数的频率。它用于生成用户数量的柱状图(如果有意义的话)。让我知道,如果这仍然是混乱的任何方式。看起来它真的很接近。我得到的结果是:开玩笑!我是在回显
结果
,而不是
结果
,这导致了问题。我看到的唯一一件不太有效的事情是没有频率0的数据。有什么可以做的吗?我不相信这个聚合将包括一个零长度数组文档的频率值。我挠头了一分钟,想知道为什么我的频率总和与我的特定收藏数量不匹配。
query :

[{ 
   $group: {
     _id:{$size:'$saved_things'},
     total: { $sum: 1 },
   }
}]

output:
[{ _id: 4, total: 2 }]