node.js - 节点/mongoDB 遇到问题
问题描述
如果已经有一个线程可以解决我的问题,但我找不到它,请原谅我。
我对 Web 开发还很陌生,目前正在研究 udemy 的全栈开发人员课程之一的课程材料。
我将 node 与 express 和 mongoDB 与 mongoose 一起使用。目前,该项目是用 mongoDB 升级我们在课程前面构建的一个预先存在的待办事项应用程序(大惊喜吧?)。
一切都很好,直到我似乎无法重现讲师的结果。
问题是当我尝试使用快速路由参数来动态生成新列表(以及新的数据库集合)时。
const listItemsSchema = new mongoose.Schema({
name: String
});
//create collection
const ListItem = mongoose.model("ListItem", listItemsSchema);
const item1 = new ListItem({
name: "item1"
});
const item2 = new ListItem({
name: "item2"
});
const item3 = new ListItem({
name: "item3"
});
const defaultItems = [item1, item2, item3];
const listSchema = new mongoose.Schema({
name: String,
items: [listItemsSchema]
});
const List = mongoose.model("List", listSchema);
app.get("/:listName", (req, res) => {
const newListName = req.params.listName;
console.log(newListName); //logs new list name correctly
console.log(defaultItems); //logs default items array correctly
const newList = new List({
name: newListName,
list: defaultItems
});
newList.save();
console.log(newList); // logs the name field correctly, however, logs the items array as empty
});
当我查看 mongo shell 中的集合时,它是同样的故事。默认项目数组内容未保存,我一生都无法弄清楚原因。
解决方案
那是因为您的listSchema
定义具有属性items
,但您正在使用属性对其进行实例化list
更改您的代码如下:
const newList = new List({
name: newListName,
items: defaultItems
});
另请注意,这newList.save()
是一个异步操作,您必须等待它被解决。
newList.save()
.then((result) => {
console.log(result);
}
或在异步函数中:
const result = await newList.save();
console.log(result);
推荐阅读
- angular - Angular6 & tinyMCE 编辑器
- if-statement - 带有检索和变量的 sparql 查询 if 语句
- php - 如何将图像名称保存在数据库中以便以后查看?
- excel - 删除 VBA 工作表中提到的多个变量列
- php - 在验证用户与 Symfony 4 和 FOSUserBundle 连接后重定向用户
- jsf - ui:repeat 中的复合组件:如何正确保存组件状态
- sql - SQL WHERE 子句从多个列中过滤
- java - 如何从java中的字节数组中获取整数数组并打印输出数组?字节数组来自 225*225 维度的灰度图像
- python - 未找到文件 (.json)
- reactjs - 我对 ReactJs 还很陌生,我正在尝试渲染用户选择的图像文件。但我失败得很惨