gpt4 book ai didi

mongodb - MapReduce、MongoDB 和 node-mongodb-native

转载 作者:可可西里 更新时间:2023-11-01 09:31:51 25 4
gpt4 key购买 nike

我正在使用 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 效率低下吗?这是错误吗?

谢谢! :)

最佳答案

reduce 函数从未被调用的原因是因为您为每个键发出一个值,因此没有理由让 reduce 函数实际执行。这是一个如何触发 reduce 函数的例子

collection.insert([{group: 1, price:41}, {group: 1, price:22}, {group: 2, price:12}], {w:1}, function(err, r) {

// String functions
var map = function() {
emit(this.group, this.price);
};

var reduce = function(key, values) {
return Array.sum(values);
};

collection.mapReduce(
map,
reduce,
{
query:{},
// sort: {'count': -1},
// limit: 10,
// jsMode: true,
// verbose: false,
out: { inline: 1 }
},
function(err, results) {
console.log("----------- 0")
console.dir(err)
console.dir(results)
// logger.log(results);
}
);

请注意,我们按“组”键发出,这意味着有 n >= 0 个条目按“组”键分组。由于您发出 _id 每个键都是唯一的,因此不需要 reduce 函数。

http://docs.mongodb.org/manual/reference/command/mapReduce/#requirements-for-the-reduce-function

关于mongodb - MapReduce、MongoDB 和 node-mongodb-native,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17644600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com