我试图使用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'] 的形式出现结果。我是如何实现它的,我尝试了mapReduce但却无法以这种方式获得结果。
这是我的代码
collection.mapReduce( function EachBranch( ) {
emit( this.name, this.value);
}, function ( key, values ) {
},{ out: { inline: 1 } });
答案 0 :(得分:2)
您需要在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();
}
);
注意:我没有处理任何错误,所以请进行防御性编码。