mongodb mapreduce finalize函数不是';t从javascript工作(相同的代码从shell工作)
我有以下奇怪的情况。我已经开始为MongoDB编写map/reduce作业。现在,除了“Finalize”步骤外,我的代码(见下面代码中的Map/Reduce/Finalize函数)正在运行。通过mongo shell运行的相同代码正在生成预期的结果(基于arraylength,将file_count字段添加到结果中。JS和shell命令都会平均填充每个磁盘集合的文件(每个磁盘的文件数组包含相同的结果)。我已经尝试将jsMode设置为true/false 有什么帮助/建议吗 谢谢 砂光机mongodb mapreduce finalize函数不是';t从javascript工作(相同的代码从shell工作),javascript,node.js,mongodb,shell,mapreduce,Javascript,Node.js,Mongodb,Shell,Mapreduce,我有以下奇怪的情况。我已经开始为MongoDB编写map/reduce作业。现在,除了“Finalize”步骤外,我的代码(见下面代码中的Map/Reduce/Finalize函数)正在运行。通过mongo shell运行的相同代码正在生成预期的结果(基于arraylength,将file_count字段添加到结果中。JS和shell命令都会平均填充每个磁盘集合的文件(每个磁盘的文件数组包含相同的结果)。我已经尝试将jsMode设置为true/false 有什么帮助/建议吗 谢谢 砂光机 var
var mongojs = require('mongojs');
var db = mongojs('mongodb://super.local/sha', ['files', 'files_per_disc']);
db.on('error', function(err) {
console.log('database error', err)
})
db.on('connect', function() {
console.log('database connected')
})
var files_per_disc = {};
files_per_disc.execute = function() {
console.log('execute');
var mapper = function() {
var key = this.disc; // Disc
var mapObject = {
files: [this.filename]
};
if (this.filesize > 5000000000) {
emit(key, mapObject);
}
};
var reducer = function(key, values) {
var reducedObject = {
files: []
};
values.forEach(function(value) {
value.files.forEach(function(item) {
if (reducedObject.files.indexOf(item) == -1) {
reducedObject.files.push(item);
}
});
});
return reducedObject;
};
var finalizer = function(key, reducedObject) {
if (reducedObject.files) {
reducedObject.file_count = reducedObject.files.length;
}
return reducedObject;
};
db.files.mapReduce(
mapper,
reducer, {
jsMode: false,
out: 'files_per_disc',
finalize: finalizer
},
function(err, result) {
if (err) {
return console.log(err)
};
return console.log(result);
}
);
};
module.exports = files_per_disc;
嗯…挖得更深一点。这是一个与“mongojs”包相关的问题。在“重构”我的代码以使用“mongodb”NPM包之后,它开始工作了……。我打开了一个github问题