Есть похожий вопрос. Не в "mon goose" конкретно, или, по крайней мере, еще не в письменной форме. Оболочка MongoDB начиная с версии 2.6 фактически использует «API массовых операций» «под капотом», как это было для всех основных вспомогательных методов. В своей реализации он сначала пытается сделать это, и если обнаруживается сервер более старой версии, то существует «запасной вариант» для унаследованной реализации.
Все методы mon goose, «в настоящее время» использующие «устаревшая» реализация или ответ касающейся записи и основные c устаревшие методы. Но есть метод доступа .collection из любой данной модели mon goose, который по существу обращается к «объекту коллекции» из базового «собственного драйвера узла», в котором реализован сам mon goose:
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
});
});
Основное преимущество заключается в том, что «mon goose method» фактически осознает, что соединение на самом деле еще не может быть установлено, и «ставит в очередь», пока это не будет завершено. Родной драйвер, в который вы «копаетесь», не делает этого различия.
Так что вы действительно должны знать, что соединение установлено каким-либо образом или в какой-либо форме. Но вы можете использовать собственные методы драйвера, если вы осторожны с тем, что делаете.