Mongoose findById() - 不起作用,尝试了所有通过 ID 获取文档的函数,但没有一个起作用

问题描述 投票:0回答:2

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 获取文档的方法,但没有一个有效,我认为这是我的数据库中的问题,因为没有一个方法有效..

node.js mongodb mongoose mongodb-query node-mongodb-native
2个回答
1
投票
您的数据库显示

_id

 字段存储为 
String
 类型,但您的架构并未反映这一点(这意味着 Mongoose 会假设 
_id
ObjectId
 类型,并将其转换为在进行查询之前输入该类型)。

如果您将

_id

 添加到您的架构中,查询将开始工作:

const courseSchema = mongoose.Schema({ _id : String, ... });
但是,我建议解决主要问题,即写入数据库的代码与查询数据库的代码之间的架构不匹配。


0
投票
只需添加所有架构_id,因为它将使用数据库上的 VS Code 进行更新,因此架构应始终出现在 VS Code 修饰符上...

© www.soinside.com 2019 - 2024. All rights reserved.