Подтвердить что ты не робот

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
    });
});

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

4b9b3361

Ответ 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);
});