2015-12-09 17 views
10

Nie mogę wykonać zbiorczego wstawiania do mongo za pomocą mangusty.MongoError: Niepoprawna operacja, brak operacji zbiorczo

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); 
    } 
}); 

Dostaję następujący błąd

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 

ktoś proszę dać mi znać, co robię źle.?

+0

stoi sam problem ..? – Ningappa

+0

ten sam problem, którego doświadczam teraz, wszelkie aktualizacje? – securecurve

+1

'Web.collection.insert' jest składnią Mongo, a nie Mongoose. Nie jestem pewien, dlaczego to się nie udaje. Ale ponieważ używasz Mongoose, możesz użyć 'Webs.insertMany (resultData)'. [dokumenty tutaj] (http://mongoosejs.com/docs/api.html#model_Model.insertMany) –

Odpowiedz

-1

Wystarczy sprawdzić, czy instancja luzem prowadzi działalność przed wywołaniem execute z tej funkcji:

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(); 
0

Oto mój czek w podstawowym jeśli blok jeśli uzywasz surowego sterownik MongoDB dla węzła js, to może pomóc :

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 
} 
1

Najprawdopodobniej próbujesz wstawić pustą tablicę.

Oto ktoś MongoDB Jira site reference to this error

This is probably caused by your last insertMany attempting to insert an empty array [ ]. I suggest you insert a guard before insertMany.