' undefined不是一个功能'使用无序批量upsert时

时间:2015-04-21 12:53:26

标签: node.js mongodb

我正在使用批量upsert一次更新/添加多个文档到我的数据库:

var bulk = collection.initializeUnorderedBulkOp();
docs.forEach(function(doc, index, array){
  bulk.find({'docId' : doc.docId}).upsert().updateOne(doc);
});
bulk.execute();

bulk.execute上,这会返回以下错误:

/myPath/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:771
  catch(err) { process.nextTick(function() { throw err}); }
                                                   ^
TypeError: undefined is not a function
    at /myPath/node_modules/mongodb/lib/bulk/unordered.js:470:5

我查看了mongodb模块中的代码,它似乎在回调失败:

// Execute batches
return executeBatches(this, function(err, result) {
  callback(err, result);
});

数据正在按预期完全写入数据库,但仍然会抛出此错误,我无法解决我可能做的事情。

我已经通过使用普通对象排除了数据问题,并且使用批量插入而不是upsert,因为它们更简单,但结果是相同的。

1 个答案:

答案 0 :(得分:5)

您需要invoke bulk.execute with a callback

bulk.execute(function(err,results) {
    if(err)
        console.error(err);
    else
        console.log(results);
});

或类似的,应该工作。