插入mongo forEach继续永远

时间:2015-05-04 01:32:36

标签: mongodb

我通过“扩展”现有文档20次来创建一些假文档。但; forEach循环似乎永远不会结束。为什么呢?

db['COLLECTION'].find({}).forEach(function(doc){
    for( var x = 0; x < 20; x++ ) {
            delete doc['_id'];
            doc['Author'] = randArrayElement(names); /* chooses random name */
            doc['Description'] = buzzword(); /* makes something up*/

            db['COLLECTION'].insert(doc);
        }
    }
 )

1 个答案:

答案 0 :(得分:5)

我认为你需要在这里使用snapshot

db['COLLECTION'].find().snapshot().forEach(function(doc){
  ...
})

我认为发生这种情况是因为写入操作可能导致文档移动并且快照修复它:

  

$ snapshot运算符可防止光标返回文档   不止一次,因为介入的写入操作导致a   移动文件。

如果这没有帮助,那么我还有另外一个想法,即光标会拾取新创建的文档。为了解决这个问题,我将创建一个包含所有文档的数组,然后单独迭代它们并为每个文档执行20次插入。