Konkrétně ne v "mongoose", nebo alespoň zatím ne v době psaní. Shell MongoDB od verze 2.6 ve skutečnosti používá „API pro hromadné operace“ „pod kapotou“, jako tomu bylo u všech obecných pomocných metod. Ve své implementaci se o to nejprve pokusí, a pokud je detekován server starší verze, dojde k „návratu“ ke starší implementaci.
Všechny metody mongoose "aktuálně" používají "starší" implementaci nebo odpověď na otázku zápisu a základní starší metody. Existuje však .collection
přístupový objekt z jakéhokoli daného modelu mongoose, který v podstatě přistupuje k "objektu kolekce" ze základního "nativního ovladače uzlu", na kterém je mongoose implementován:
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
});
});
Hlavním úlovkem je, že „metody mongoose“ si ve skutečnosti uvědomují, že spojení ve skutečnosti ještě nebylo vytvořeno, a „pořadí“, dokud to není dokončeno. Nativní ovladač, do kterého „kopete“, tento rozdíl nerozlišuje.
Takže si opravdu musíte být vědomi toho, že spojení je navázáno nějakým způsobem nebo formou. Ale můžete použít metody nativního ovladače, pokud budete opatrní v tom, co děláte.