我有这种格式的mongo文件。
{"_id" : 1,"Summary" : {...},"Examples" : [{"_id" : 353,"CategoryId" : 4},{"_id" : 239,"CategoryId" : 28}, ... ]}
{"_id" : 2,"Summary" : {...},"Examples" : [{"_id" : 312,"CategoryId" : 2},{"_id" : 121,"CategoryId" : 12}, ... ]}
如何映射/缩小它们以获得类似的哈希:
{ [ result[categoryId] : count_of_examples , .....] }
即。每个类别的例子数。 我有30个类别,都在Categories集合中指定。
答案 0 :(得分:1)
如果您可以使用2.1(即将发布的版本2.2的开发版本),那么您可以使用Aggregation Framework,它看起来像这样:
db.collection.aggregate( [
{$project:{"CatId":"$Examples.CategoryId","_id":0}},
{$unwind:"$CatId"},
{$group:{_id:"$CatId","num":{$sum:1} } },
{$project:{CategoryId:"$_id",NumberOfExamples:"$num",_id:0 }}
] );
第一步将Examples(CategoryId)的子字段投影到文档的顶级字段(不是必需但有助于提高可读性),然后我们展开示例数组,为CatId的每个数组值创建单独的文档,我们做一个“分组依据”并计算它们(我假设CategoryId的每个实例都是一个例子,对吗?)最后我们再次使用投影来重新标记字段并使结果看起来像这样:
"result" : [
{
"CategoryId" : 12,
"NumberOfExamples" : 1
},
{
"CategoryId" : 2,
"NumberOfExamples" : 1
},
{
"CategoryId" : 28,
"NumberOfExamples" : 1
},
{
"CategoryId" : 4,
"NumberOfExamples" : 1
}
],
"ok" : 1