Проблемы с заполнением базы данных MongoDB с помощью цикла - PullRequest
0 голосов
/ 21 марта 2020

Я создаю приложение для планирования встреч (Node, MongoDB, Mon goose), и у меня возникают проблемы с заполнением базы данных слотами для встреч. Вот что я пытаюсь сделать (упрощено для экономии места):

const mongoose = require("mongoose");

const Schema = mongoose.Schema;
const ApptSchema = new Schema({
  count: { type: Number, required: true },
});

const Appt = mongoose.model("Appt", ApptSchema);

require("dotenv").config();

mongoose.connect(process.env.MONGODB_URI, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  useCreateIndex: true
});
mongoose.connection.on("connected", () => {
  console.log("Database connection successful!");
});

let count = 1;

while (count < 10) {
  const appt = new Appt({count: count});
  appt.save((err, docs) => {
    console.log("save callback reached")
  })

Я уверен, что это зависит от неправильного понимания того, как работает функция save ... Я поставил console.log оператор в верхней части while l oop, и обнаружил, что он просто работает вечно, никогда не затрагивая функцию save. Просмотр в базе данных подтверждает, что ничего не сохраняется. Еще один интересный момент: если я продублирую содержимое while l oop и вставлю его перед началом l oop, он все равно не сохранится. Чего мне не хватает в том, как работает функция save, и как я могу go добиться своей цели?

Редактировать: Теперь я понимаю, что это потому, что функция save асинхронна, но я не совсем уверен, как обойти это ... Может быть, собрать все объекты Appt и положить их sh в список в while l oop, а затем добавить их в базу данных по адресу раз так?

const appts = [all the Appt objects]
Appt.collection.insert(appts, function (err, docs) {
      if (err){ 
          return console.error(err);
      } else {
        console.log("Multiple documents inserted to Collection");
      }
    }); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...