我如何在runCommand结果上执行forEach

时间:2015-06-04 09:26:26

标签: mongodb

我得到了E QUERY TypeError: Object [object Object] has no method 'forEach'

我怎样才能得到每个结果?

cur = db[source_collection].runCommand('aggregate',
  pipeline: pipeline
  allowDiskUse: true)
cur.forEach (customer) ->
  db[output_collection].update({'_id': customer._id},{
          '$pull': {
              '$records.items': {
                  $regex: /\s+/
              }
          }
    })    

3 个答案:

答案 0 :(得分:0)

使用aggregate()帮助程序,因为在2.6及更高版本中,aggregate()帮助程序始终返回游标:

cur = db[source_collection].aggregate pipeline
cur.forEach (customer) ->
    db[output_collection].update('_id': customer._id,
        '$pull': 
            'records.$.items': 
                '$regex': /\s+/       
    )  

答案 1 :(得分:0)

根据mongo aggregation runCommand 文档

  

使用aggregate命令返回游标是一个低级操作,适用于驱动程序的作者。

  

runCommand返回包含结果的文档

所以你写cur.result.forEach

答案 2 :(得分:0)

它虽然陈旧,但即便如此:

对于第一种情况,我认为它会有所帮助:

cur.result.forEach(
   function(doc)
   {
      ...
      ...

   })

我还有更多可以为将来的问题添加更多内容:

db.runCommand(
   { aggregate: "MyCollectionName",
     pipeline: [
                 { $group : 
                     { 
                        _id : "$GroupColumnName"
                        ,"count": { "$sum": 1 }
                        , AllDocs: { $push: "$$ROOT" } 
                     } 
                 },
                 { "$match": {"_id" :{ "$ne" : null } , "count" : {"$gt": 1} } }
               ],
     allowDiskUse: true
   }
).result.forEach(
   function(doc)
   {
       doc.AllDocs.forEach(
            function(docInternal)
            {
                print(docInternal._id);
            }
       );
   })