2013-03-14 2 views
19

Я знаю, что в последней версии Mongoose вы можете передать несколько документов методу создания или даже лучше в моем случае массив документов.Mongoose создать несколько документов

var array = [{ type: 'jelly bean' }, { type: 'snickers' }]; 
Candy.create(array, function (err, jellybean, snickers) { 
    if (err) // ... 
}); 

Моя проблема заключается в том, что размер массива является динамическим, так в обратный вызов, было бы полезно иметь массив созданных объектов.

var array = [{ type: 'jelly bean' }, { type: 'snickers' }, ..... {type: 'N candie'}]; 
Candy.create(array, function (err, candies) { 
    if (err) // ... 

    candies.forEach(function(candy) { 
     // do some stuff with candies 
    }); 
}); 

Не в документации, но что-то вроде этого возможно?

ответ

30

Вы можете получить доступ к переменному списку параметров для вашего обратного вызова через arguments. Таким образом, вы могли бы сделать что-то вроде:

Candy.create(array, function (err) { 
    if (err) // ... 

    for (var i=1; i<arguments.length; ++i) { 
     var candy = arguments[i]; 
     // do some stuff with candy 
    } 
}); 
+0

Ха-ха, забыл об этом. Спасибо. – lostintranslation

11

Согласно this ticket на GitHub, Mongoose 3,9 и 4,0 будет возвращать массив, если вы поставляете массив и распространения аргументов, если вы передаете распространение при использовании create().

0

путем вставки функции сбора дб, пример:

Model.collection.insert(array, function(err, list) { 
    if (err) { 
     throw err; 
    } 

    console.log("\nlist:", list); 
}); 
Смежные вопросы