如何在MongoDB中累积结果(使用forEach?)?

时间:2012-11-20 13:13:59

标签: javascript mongodb mongodb-query nosql

假设我想搜索一个集合,扫描返回的结果集并返回它的一些转换。我尝试过以下代码:

db.my_collection.find({timestamp : {$gt: 1343032491799}}, {_id:0,sid:1}).limit(20).forEach(function(element) { print(element.sid); })

好的,它运作良好。问题是:如何将结果(sid s)累积到数组中而不是仅仅打印它们?

更新:首选红宝石式单行(但不是必需的)

3 个答案:

答案 0 :(得分:4)

在光标上调用toArray而不是forEach

var a = db.my_collection.find(
    {timestamp : {$gt: 1343032491799}}, {_id:0,sid:1}).limit(20)
    .toArray().map(function(o){return o.sid;})

<强>更新

似乎您可以跳过toArray并直接转到map,因为游标直接提供了该方法:

var a = db.my_collection.find(
    {timestamp : {$gt: 1343032491799}}, {_id:0,sid:1}).limit(20)
    .map(function(o){return o.sid;})

答案 1 :(得分:0)

您可以在父作用域中使用变量。

var myArr = []; //the results will go there
db.my_collection.find({timestamp : {$gt: 1343032491799}}, {_id:0,sid:1}).limit(20).forEach(function(element) {
  myArr.push(element.sid); //this function has access to myArr
});

答案 2 :(得分:0)

将id推送到数组:

var myArray = [];
b.my_collection.find({timestamp : {$gt: 1343032491799}}, {_id:0,sid:1 })
    .limit(20)
    .forEach(function(element) {
        myArray.push(element.sid);
    })​