Javascript MapReduce函数MongoDB NodeJs
我试图使用mapReduce函数以数组的形式返回集合中每个对象的字段。这些是我收藏的文件Javascript MapReduce函数MongoDB NodeJs,javascript,node.js,mongodb,mapreduce,Javascript,Node.js,Mongodb,Mapreduce,我试图使用mapReduce函数以数组的形式返回集合中每个对象的字段。这些是我收藏的文件 { _id: '1', name: 'a' }, { _id: '2', name: 'b' }, { _id: '4', name: 'c' }, { _id: '5', name: 'd' }, { _id: '6', name: 'e' }, { _id: '7', name: 'f' } 现在我想得到这个形式的结果,['a','b','c','d','e','f']。如何实现它,我尝试
{ _id: '1', name: 'a' },
{ _id: '2', name: 'b' },
{ _id: '4', name: 'c' },
{ _id: '5', name: 'd' },
{ _id: '6', name: 'e' },
{ _id: '7', name: 'f' }
现在我想得到这个形式的结果,['a','b','c','d','e','f']。如何实现它,我尝试了mapReduce,但以这种方式无法获得结果
这是我的密码
collection.mapReduce( function EachBranch( ) {
emit( this.name, this.value);
}, function ( key, values ) {
},{ out: { inline: 1 } });
您需要在reducer中迭代值,并将结果转换为所需的形式 示例:在mongo shell中尝试
db.collection.mapReduce(
function() {
emit(1, this.name)
},
function(k,v){
var result = {};
result.names = v;
return result;
},
{out: {inline:1}}
).results[0].value.names;
根据示例输入文档,您将得到以下输出:
[ "a", "b", "c", "d", "e", "f" ]
更新:Node.js解决方案:
collection.mapReduce(
function () {
emit(1, this.name)
},
function (k, v) {
var result = {};
result.names = v;
return result;
},
{ out: { inline: 1 } },
function (err, result) {
assert.equal(null, err);
if (result) {
console.log(result[0].value.names);
}
db.close();
}
);
注意:我没有处理任何错误,因此请执行防御性编码
您需要在reducer中迭代值,并将结果转换为所需的形式 示例:在mongo shell中尝试
db.collection.mapReduce(
function() {
emit(1, this.name)
},
function(k,v){
var result = {};
result.names = v;
return result;
},
{out: {inline:1}}
).results[0].value.names;
根据示例输入文档,您将得到以下输出:
[ "a", "b", "c", "d", "e", "f" ]
更新:Node.js解决方案:
collection.mapReduce(
function () {
emit(1, this.name)
},
function (k, v) {
var result = {};
result.names = v;
return result;
},
{ out: { inline: 1 } },
function (err, result) {
assert.equal(null, err);
if (result) {
console.log(result[0].value.names);
}
db.close();
}
);
注意:我没有处理任何错误,因此请执行防御性编码
见我上面的笔记。我清楚地提到我没有做任何错误检查。如果没有结果,您将得到错误。我将错误处理留给你。请注意,这不是编码服务。我们是来帮忙的,但不是来解决任务或做工作的。我明白,问题在于你的代码中没有定义结果。你试过了吗?复制以上代码并在shell中运行。据我所知,
.results….
是mongo的一部分,不能在nodejs中使用?所以我必须映射返回的值并从中提取名称?什么是emit()?请参阅上面的注释。我清楚地提到我没有做任何错误检查。如果没有结果,您将得到错误。我将错误处理留给你。请注意,这不是编码服务。我们是来帮忙的,但不是来解决任务或做工作的。我明白,问题在于你的代码中没有定义结果。你试过了吗?复制以上代码并在shell中运行。据我所知,.results….
是mongo的一部分,不能在nodejs中使用?所以我必须映射返回的值并从中提取名称?什么是emit()?