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

Как сохранить массив объектов в mongoose DB только с одним вызовом?

Есть ли способ сохранить массив объекта JSON для mongodb с помощью только one? что-то вроде:

schemeObject.save(array_of_json_object, callback);

Я использую mongoosejs

4b9b3361

Ответ 2

Существует способ вставки вставки с помощью MongooseJS. Я не уверен, была ли эта новая функция, так как этот вопрос был задан/ответил, но я решил, что если кто-то придет сюда из поиска, они должны знать, как это сделать.

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

Вот документы: http://mongoosejs.com/docs/api.html#model_Model.create

Ответ 3

Как насчет чего-то подобного? Я знаю, что он проходит через весь массив. Не спрашивайте меня о Big O для этого. Возможно, это не лучший способ вставить, но работает только для первоначального дампа данных какого-то рода.

var arr = // array of objects;
    res = [];

arr.forEach(function (item) {
    item.save(function (err) {
        res.push(err);
        if (res.length === arr.length)
        {
            // Done
        }
    });
});

Ответ 4

Еще одно обходное решение, которое я использовал. Если вы используете mongoose с promises, вы можете сделать это, используя Q.

Вы можете начать использовать Q в качестве обещания по умолчанию для мангуста, используя приведенный ниже код:

const mongoose = require('mongoose');
mongoose.Promise = require('q').Promise;

Затем вы можете сохранить массив документов, как показано ниже. Скажем, мы храним массив моделей пользователей, которые я показал в переменной users.

Q
  .all(users.map(curr => curr.save()))
  .then((results) => { //do something })
  .catch((err) => { //handle error })

.save() вернет обещание q и используя функцию массива map, мы создадим массив обещаний, используя массив моделей пользователей.

Ответ 5

Это также работает с мангустом

Laptop.insertMany(laptopData, function (err, laptop) {
  if (err) {
    console.log(err);
  };
  console.log(laptop);
});