【发布时间】:2021-01-02 13:43:24
【问题描述】:
我正在学习 Node.js 并尝试使用 mongo db 并正在使用 mongoose。我在下面的代码中检测到对我没有意义的 insertMany 模式
ItemsModel.find({}, function(err, toDoListDb) {
if (err) {
console.log("error reading items");
} else {
console.log("the DB length is " + toDoListDb.length);
if (toDoListDb.length === 0) {
ItemsModel.insertMany(defaultItems, function(err) {
if (err) {
console.log("Error while inserting default items");
} else {
console.log("default items insertion successful");
}
});
console.log("entered default items and redirect");
res.redirect("/");
} else {
console.log("read from DB successful");
res.render("list", {
listTitle: day,
newListItems: toDoListDb
});
}
};
});
如果我第一次在运行应用程序时点击 localhost 并且数据库为空,则我有一个数组(在此代码之外),其中包含要写入数据库的“默认项”列表。我检查数据库集合的长度,如果是0,则默认项写入数据库。如果数据库已经有一些文档,它会将它传递给一个 ejs 模板并呈现它。
我有 console.logs 来分析当数据库最初为空时会发生什么。如果数据库绝对是空的 - 内部没有定义集合。然后,由于某种原因,代码需要多次尝试写入数据库。在最后一次尝试中,当数据库写入实际成功时,我实际上按顺序获得了控制台日志:“默认项目插入成功”和“插入默认项目时出错”。这没有任何意义。
我正在通过在 mongoDB 控制台上执行 dropDatabase() 后运行应用程序来测试这一点。如果不是 dropDatabase,我只是删除集合中的文档,但在 DB 中保留空集合,则默认项的 insertMany 将按预期工作。
所以我的问题是,有没有办法了解 insertMany 内部发生的事情并对后端发生的事情充满信心。因为我在这里看到几个关于 insertMany 没有按预期插入项目的问题。
PS:渲染的最终输出是正确的。我只是不清楚数据库写入是如何执行的。
【问题讨论】: