我试图使用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 } });
您需要迭代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();
}
);
注意:我没有处理任何错误,所以请做防御性编码。