假设我想搜索一个集合,扫描返回的结果集并返回它的一些转换。我试过以下代码:
db.my_collection.find({timestamp : {$gt: 1343032491799}}, {_id:0,sid:1}).limit(20).forEach(function(element) { print(element.sid); })
好的,效果很好。对于这个问题:我怎样才能将结果(sids)累积到一个数组中而不是仅仅打印它们?
更新:当然首选红宝石风格的单线(但不是必需的)
假设我想搜索一个集合,扫描返回的结果集并返回它的一些转换。我试过以下代码:
db.my_collection.find({timestamp : {$gt: 1343032491799}}, {_id:0,sid:1}).limit(20).forEach(function(element) { print(element.sid); })
好的,效果很好。对于这个问题:我怎样才能将结果(sids)累积到一个数组中而不是仅仅打印它们?
更新:当然首选红宝石风格的单线(但不是必需的)
调用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;})
您可以在父范围内使用变量。
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
});
将 id 推送到数组中:
var myArray = [];
b.my_collection.find({timestamp : {$gt: 1343032491799}}, {_id:0,sid:1 })
.limit(20)
.forEach(function(element) {
myArray.push(element.sid);
})