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

Posted

技术标签:

【中文标题】MongoError:无效操作,没有批量操作【英文标题】:MongoError: Invalid Operation, No operations in bulk 【发布时间】:2016-03-14 10:06:53 【问题描述】:

我无法使用 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

请任何人告诉我我做错了什么。?

【问题讨论】:

任何人都面临同样的问题..? 我现在遇到同样的问题,有更新吗?? Web.collection.insert 是 Mongo 语法,而不是 Mongoose。我不确定它为什么会失败。但是由于你使用的是 Mongoose,你可以使用Webs.insertMany(resultData)。 docs here 【参考方案1】:

您很可能正在尝试插入一个空数组。

这里是MongoDB Jira site reference to this error

这可能是由于您最后一次 insertMany 尝试插入 空数组 [ ]。我建议你在之前插入一个警卫 插入许多。

【讨论】:

顺便说一下Mongo不允许插入空数组吗?【参考方案2】:

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

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

【讨论】:

【参考方案3】:

如果您使用 Node js 的原始 MongoDB 驱动程序,这是我在基本 if 块中的检查,它可能会有所帮助:

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

【讨论】:

以上是关于MongoError:无效操作,没有批量操作的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis 批量更新 ORA-00911: 无效字符的错误

猫鼬批量插入错误

Linux命令之sed批量替换字符串操作

Redisson批量操作类RBuckets和管道利器RBatch

安全标头在 PayPal 批量付款中无效

GlobeLand30全球数据处理教程(批量投影转换无效值处理拼接)