Mongoose findById 不起作用。
仅当我仅调用 Course.find(); 时才有效
const mongoose = require("mongoose");
mongoose
.connect("mongodb://localhost/mongo-exercises")
.then(() => console.log("Connected to MongoDB"))
.catch((err) => console.error("Could not connect to MongoDB", err));
const courseSchema = mongoose.Schema({
tags: [String],
date: { type: Date, default: Date.now },
name: String,
author: String,
isPublished: Boolean,
price: Number,
});
const Course = mongoose.model("Course", courseSchema);
async function updateCourse(id){
const course = await Course.findById(id);
if(!course) return ;
console.log(course);
course.isPublished = true;
course.author = "Changed Author";
const result = await course.save();
console.log(result);
}
async function getCourses() {
const courses = await Course.find();
console.log(courses);
}
updateCourse('5a68fdd7bee8ea64649c2777');
我的 VSCODE 终端显示此响应
anuragtj@Anurags-MacBook-Pro exercise % node index.js
Connected to MongoDB
它只是停在连接到 mongodb 上,没有显示任何其他内容。我尝试了多种通过 iD 获取文档的方法,但没有一个有效,我认为这是我的数据库中的问题,因为没有一个方法有效..
_id
字段存储为
String
类型,但您的架构并未反映这一点(这意味着 Mongoose 会假设
_id
是
ObjectId
类型,并将其转换为在进行查询之前输入该类型)。如果您将
_id
添加到您的架构中,查询将开始工作:
const courseSchema = mongoose.Schema({
_id : String,
...
});
但是,我建议解决主要问题,即写入数据库的代码与查询数据库的代码之间的架构不匹配。