我正在构建一个约会计划应用程序(Node,MongoDB,Mongoose),并且在尝试使用约会槽填充数据库时遇到了麻烦。 这是我想要做的(简化以节省空间):
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
语句,发现它只是永远运行,永远不要点击save
函数。在数据库中查看确认没有任何保存。另一个有趣的地方:如果我复制while
循环的内容并将其放在循环开始之前,它仍然不会保存。
我对save
函数的工作方式缺少什么?如何实现目标?
编辑:所以我现在意识到这是因为save
函数是异步的,但是我不确定如何解决该问题……也许可以构建所有Appt
对象并推送将它们添加到while
循环中的列表中,然后像这样一次将它们全部添加到数据库中?
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");
}
});