在使用node/mongoDB时遇到问题



如果已经有一个线程可以解决我的问题,请原谅我,但我找不到它。

我对 Web 开发很陌生,目前正在研究 udemy 的全栈开发人员课程之一的课程材料。

我正在使用带有express的node和带有猫鼬的mongoDB。目前,该项目是升级我们在课程早期构建的预先存在的待办事项应用程序(大惊喜吧?(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);

最新更新