MongoDB aggregate() - 错误" TypeError:无法调用方法' forEach'未定义"

时间:2014-11-23 22:27:16

标签: javascript mongodb foreach mongodb-query

我在“script.js”中有以下脚本

conn = new Mongo();
db = conn.getDB("learn");
db.contracts.aggregate([
  { $match: { regionCode: '77' } },
  { $unwind: '$products' },
  { 
    $project: {  
      _id: '$_id',
      regNum: '$regNum',  
      prodName: '$products.name',  
      prodPrice: '$products.price'
    }
  },
  { $match: { 'prodName' : 'Water' } }
], {cursor:{}}).result.forEach(printjson);

我通过以下方式从命令提示符运行它

mongo script.js>> out.txt

在文件“out.txt”中我有错误

TypeError:无法在script.js中调用未定义的方法'forEach'

同样的问题,当我从mongo shell mongo.exe运行脚本时(通过使用load())。

当我从Robomongo 0.8.4运行相同的聚合命令时,我得到了成功的结果(3个json格式的文档)。有谁知道,为什么会发生这种情况?

Mongodb 2.6.5版

1 个答案:

答案 0 :(得分:3)

您需要在没有result变量访问权限的情况下运行它。 mongodb在cursor中访问时返回的shell没有名为result的属性,因此您会收到错误。

db.contracts.aggregate([
  { $match: { regionCode: '77' } },
  { $unwind: '$products' },
  { 
    $project: {  
      _id: '$_id',
      regNum: '$regNum',  
      prodName: '$products.name',  
      prodPrice: '$products.price'
    }
  },
  { $match: { 'prodName' : 'Water' } }
], {cursor:{}}).forEach(printjson);