Я создаю приложение для планирования встреч (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");
}
});