可能我有点超出能力范围,因为我仍在学习 MongoDB 的各个方面,但我还是要试试。
目前,我正在开发一个工具来搜索/筛选数据集,根据任意数据点(例如流行度)排序,然后按 id 进行分组。我唯一看到的方法就是通过 Mongo 的 MapReduce 功能来实现。
我无法使用 .group(),因为我处理的键超过了 10,000 个,并且我需要对数据集进行排序。
我的 MapReduce 代码完全正常,除了一件事:排序。排序根本就不起作用。
db.runCommand({
'mapreduce': 'products',
'map': function() {
emit({
product_id: this.product_id,
popularity: this.popularity
}, 1);
},
'reduce': function(key, values) {
var sum = 0;
values.forEach(function(v) {
sum += v;
});
return sum;
},
'query': {category_id: 20},
'out': {inline: 1},
'sort': {popularity: -1}
});
我已经在受欢迎程度数据点上有一个降序索引,所以它肯定不起作用是因为缺少那个:
{
"v" : 1,
"key" : { "popularity" : -1 },
"ns" : "app.products",
"name" : "popularity_-1"
}
我就是想不通为什么它不想排序。
与其内联结果集,我无法将其输出到另一个集合,然后在该集合上运行.find().sort({popularity: -1}),因为这个功能的工作方式。