我正在使用 node-mongodb-native 库在 MongoDB 上运行 MapReduce(来自 node.js)。
这是我的代码:
var map = function() {
emit(this._id, {'count': this.count});
};
var reduce = function(key, values) {
return {'testing':1};
};
collection.mapReduce(
map,
reduce,
{
query:{ '_id': /s.*/g },
sort: {'count': -1},
limit: 10,
jsMode: true,
verbose: false,
out: { inline: 1 }
},
function(err, results) {
logger.log(results);
}
);
两个问题:
1)基本上,我的reduce函数被忽略了。无论我在其中放入什么,输出都只是我的 map 函数的结果(在这种情况下没有“测试”)。有任何想法吗?
2) 除非在用于排序的字段(在本例中为计数字段)上定义了索引,否则我会收到错误消息。我明白这是意料之中的。这似乎效率低下,因为正确的索引肯定是 (_id, count) 而不是 (count),因为理论上应该首先使用 _id(用于查询),然后才应该将排序应用于适用的结果。我在这里错过了什么吗?MongoDB效率低下吗?这是一个错误吗?
谢谢!:)