Niet specifiek in "mangoest", of in ieder geval nog niet op het moment van schrijven. De MongoDB-shell vanaf de 2.6-release gebruikt eigenlijk de "Bulk operations API" "onder de motorkap" als het ware voor alle algemene hulpmethoden. In zijn implementatie probeert het dit eerst te doen, en als een oudere versieserver wordt gedetecteerd, is er een "terugval" naar de legacy-implementatie.
Alle mangoest-methoden gebruiken "momenteel" de "legacy"-implementatie of de write concern-respons en de basis legacy-methoden. Maar er is een .collection
accessor van een bepaald mangoestmodel dat in wezen toegang heeft tot het "verzamelobject" van de onderliggende "node native driver" waarop mangoest zelf is geïmplementeerd:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/test');
var sampleSchema = new Schema({},{ "strict": false });
var Sample = mongoose.model( "Sample", sampleSchema, "sample" );
mongoose.connection.on("open", function(err,conn) {
var bulk = Sample.collection.initializeOrderedBulkOp();
var counter = 0;
// representing a long loop
for ( var x = 0; x < 100000; x++ ) {
bulk.find(/* some search */).upsert().updateOne(
/* update conditions */
});
counter++;
if ( counter % 1000 == 0 )
bulk.execute(function(err,result) {
bulk = Sample.collection.initializeOrderedBulkOp();
});
}
if ( counter % 1000 != 0 )
bulk.execute(function(err,result) {
// maybe do something with result
});
});
De belangrijkste vangst daarbij is dat "mongoose-methoden" zich er feitelijk van bewust zijn dat er mogelijk nog geen verbinding tot stand is gebracht en "in de wachtrij staan" totdat dit voltooid is. De native driver waar je in duikt, maakt dit onderscheid niet.
Je moet je er dus echt van bewust zijn dat de verbinding op de een of andere manier tot stand komt. Maar je kunt de native driver-methoden gebruiken zolang je voorzichtig bent met wat je doet.