Non in "mangusta" in particolare, o almeno non ancora al momento della scrittura. La shell MongoDB a partire dalla versione 2.6 utilizza effettivamente "l'API per le operazioni in blocco" "sotto il cofano" come lo era per tutti i metodi di supporto generali. Nella sua implementazione, prova a farlo prima e se viene rilevata una versione precedente del server, c'è un "fallback" nell'implementazione legacy.
Tutti i metodi mangusta "attualmente" utilizzano l'implementazione "legacy" o la risposta alla preoccupazione di scrittura e i metodi legacy di base. Ma c'è un .collection
accessor da qualsiasi modello mongoose che essenzialmente accede all '"oggetto raccolta" dal "driver nativo del nodo" sottostante su cui è implementato mongoose stesso:
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
});
});
Il problema principale è che i "metodi mangusta" sono in realtà consapevoli che una connessione potrebbe non essere ancora stata stabilita e "coda" fino a quando non viene completata. Il driver nativo in cui stai "scavando" non fa questa distinzione.
Quindi devi davvero essere consapevole che la connessione è stabilita in qualche modo o forma. Ma puoi usare i metodi del driver nativo purché tu stia attento a quello che stai facendo.