插入mongo forEach继续永远

Mar*_*ark 3 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);
        }
    }
 )
Run Code Online (Sandbox Code Playgroud)

Sal*_*ali 5

我想你需要在这里使用快照:

db['COLLECTION'].find().snapshot().forEach(function(doc){
  ...
})
Run Code Online (Sandbox Code Playgroud)

我认为这是因为写操作可能导致文档的移动和快照修复它:

$ snapshot运算符可防止游标多次返回文档,因为插入的写入操作会导致文档移动.

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