如果已经有一个线程可以解决我的问题,但是我找不到它,请原谅我。
我对Web开发非常陌生,目前正在研究udemy的全栈开发人员课程之一的课程资料。
我正在使用带有express的node和带有mongoose的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中查看集合时,它的故事是一样的。默认的项目数组内容不会保存,而且我一生都无法找出原因。
答案 0 :(得分:1)
那是因为您的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);