2015-12-09 12 views
10

Non riesco a eseguire l'inserimento in serie su mongo utilizzando mangusta.MongoError: operazione non valida, nessuna operazione in blocco

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

sto ottenendo il seguente errore

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 

chiunque per favore fatemelo sapere cosa sto facendo di sbagliato.?

+0

di fronte lo stesso problema ..? – Ningappa

+0

stesso problema che provo ora, eventuali aggiornamenti ?? – securecurve

+1

'Web.collection.insert' è la sintassi di Mongo, non Mongoose. Non sono sicuro del motivo per cui sta fallendo. Ma dal momento che stai usando Mongoose, puoi usare 'Webs.insertMany (resultData)'. [documenti qui] (http://mongoosejs.com/docs/api.html#model_Model.insertMany) –

risposta

-1

Basta controllare se l'istanza di massa ha le operazioni prima di chiamare execute con questa funzione:

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

Ecco il mio check-in una base, se blocco se si stesse utilizzando il driver grezzo MongoDB per Node js, potrebbe aiutare :

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

Molto probabilmente si sta tentando di inserire un array vuoto.

Ecco l'chiunque 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.