MongoError:操作无效,没有批量操作

我无法使用mongoose对mongo进行批量插入。

var mongoose = require('mongoose'); var Schema = mongoose.Schema; // Define our results schema var webSchema = new Schema({"abc" : String},{ collection: 'web_v2' }); MyApi.prototype.Webs= mongoose.model('Webs', webSchema); resultData = [{"abc": "12121221"},{"abc": "44545"},{"abc": "545"}] MyApi.prototype.Webs.collection.insert(resultData, function (err, myDocuments) { if (err) { console.log(err); } else { console.log("web inserted : " + myDocuments.result.n); } }); 

我收到以下错误

 MongoError: Invalid Operation, No operations in bulk at Function.MongoError.create (/pathtoapp/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:31:11) at toError (/pathtoapp/node_modules/mongoose/node_modules/mongodb/lib/utils.js:114:22) at OrderedBulkOperation.execute (/pathtoapp/node_modules/mongoose/node_modules/mongodb/lib/bulk/ordered.js:500:11) at bulkWrite (/pathtoapp/node_modules/mongoose/node_modules/mongodb/lib/collection.js:582:8) at Collection.insertMany (/pathtoapp/node_modules/mongoose/node_modules/mongodb/lib/collection.js:477:44) at Collection.insert (/pathtoapp/node_modules/mongoose/node_modules/mongodb/lib/collection.js:753:15) at NativeCollection.(anonymous function) as insert (/pathtoapp/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:136:28) at /pathtoapp/index.js:481:57 at /pathtoapp/node_modules/async/lib/async.js:721:13 at /pathtoapp/node_modules/async/lib/async.js:52:16 at async.forEachOf.async.eachOf (/pathtoapp/node_modules/async/lib/async.js:236:30) at _parallel (/pathtoapp/node_modules/async/lib/async.js:712:9) at Object.async.parallel (/pathtoapp/node_modules/async/lib/async.js:726:9) at /pathtoapp/index.js:479:43 at /pathtoapp/node_modules/async/lib/async.js:721:13 at /pathtoapp/node_modules/async/lib/async.js:52:16 

任何人请让我知道我做错了什么?

       

网上收集的解决方案 "MongoError:操作无效,没有批量操作"

这里是我的一个基本的if块的检查,如果你正在使用原始的MongoDB驱动程序的Node js,它可能会帮助:

 let col = dbContext.collection("collectionName"); let bulk = col.initializeUnorderedBulkOp(); if(bulk && bulk.s && bulk.s.currentBatch && bulk.s.currentBatch.operations && bulk.s.currentBatch.operations.length > 0){ //execute operations } 

在使用此函数调用execute之前,只需检查批量实例是否具有操作:

 const BulkHasOperations = (b) => b && bs && bscurrentBatch && bscurrentBatch.operations && bscurrentBatch.operations.length > 0; ... const bulk = db.collection('something').initializeUnorderedBulkOp(); ... BulkHasOperations(bulk) && bulk.execute();