在mongodb中,最简单的方法是从文档中获取单个字段的数组

时间:2013-11-08 19:00:27

标签: javascript mongodb mapreduce aggregation-framework

假设我在我的收藏中有这些文件:

{
  _id: xxx,
  region: "sw"
},
{
  _id: yyy,
  region: "nw"
}

我想最终得到一个像这样的数组:

['sw', 'nw']

我已经尝试了mongodb聚合/组和mapreduce但是我总是最终得到一个文档数组,然后必须再次循环以获得单个数组。有没有办法在单个mongodb查询中实现这一点,还是总是需要查询然后进一步处理?

1 个答案:

答案 0 :(得分:2)

试试这个:

db.foo.aggregate(
    {$group: {_id: null, region: {$push: "$region"}}}
).result[0].region

或者如果你想使用map-reduce:

db.foo.mapReduce(
    function() { emit(null, this.region)},
    function(key, values) {
        result = {region: []};
        values.forEach(function(x){ result.region.push(x); });
        return result;
    },
    {out: {inline: 1}}
).results[0].value.region

或使用群组(感谢@Travis添加此群组):

db.foo.group({
  reduce: function (curr, result) {
    result.regions.push(curr.region);
  },
  initial: { regions: [] }
})[0].regions

注意

使用这些方法,您必须记住BSON Document Size Limits