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
});
});
Не в документации, но что-то вроде этого возможно?
Ответы
Ответ 1
Вы можете получить доступ к списку переменных для вашего обратного вызова через 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
}
});
Ответ 2
Согласно этот билет на GitHub, Mongoose 3.9 и 4.0 вернет массив, если вы предоставите массив и разброс аргументов, если вы поставите спред при использовании create()
.
Ответ 3
With Mongoose v5.1.5 позволяет использовать метод insertMany() с переданным массивом.
const array = [
{firstName: "Jelly", lastName: "Bean"},
{firstName: "John", lastName: "Doe"}
];
Model.insertMany(array)
.then(function (docs) {
response.json(docs);
})
.catch(function (err) {
response.status(500).send(err);
});
Ответ 4
функцией insert
сбора дБ,
Пример:
Model.collection.insert(array, (err, list) => {
if (err) throw err;
console.log('list:', list);
});