Mongoose:尝试使用 (id) 检索文档 - 获取 NULL
Posted
技术标签:
【中文标题】Mongoose:尝试使用 (id) 检索文档 - 获取 NULL【英文标题】:Mongoose: Trying to retrieve a document with (id) - getting NULL 【发布时间】:2019-02-26 04:16:01 【问题描述】:所以我正在尝试使用其 ID 检索课程。我试过使用:
Course.findOne( _id: __id ) Course.findById(id)我不确定为什么它不起作用,我是否必须在架构中定义 _id 类型?
结果:
空
这是我的架构 + 功能
const courseSchema = new mongoose.Schema(
name: type: String, required: true, minlength: 3, max: 255 ,
category:
type: String,
required: true,
enum: ["web", "mobile", "network"]
,
tag: [String],
data: Date,
author: String,
isPublished: Boolean,
price:
type: Number,
required: function()
return this.isPublished;
,
min: 10,
max: 200
,
__v: Number
);
const Course = mongoose.model("Course", courseSchema);
async function updateCourse(id)
// var __id = mongoose.Types.ObjectId(id); // tried converting string id (?)
console.log(id);
// // method 1
const course = await Course.findOne( _id: __id );
console.log("resulting...", course);
if (!course) return;
course.isPublished = true;
course.author = "Another author";
const result = await course.save();
console.log("saved....", result);
updateCourse("5c726f6feb352743f8226239");
MongoDB:
【问题讨论】:
从 Course.findOne( _id: __id ) 中删除一个 _,使其成为 Course.findOne( _id: _id )。另一种选择是 Course.findOne(_id: $eq: _id) 据我回忆,当您使用代码创建文档时,_id 将是一个字符串,而不是包含字符串的对象,例如 _id: "5PkH2QD7JLXM6NGkJ" 。 (无论如何在使用流星时都会发生这种情况),并且当您在 mongo 中创建文档时,它将添加 ObjectId。因此,您可能还必须将 ObjectId 添加到查询中。 删除 _ 没有用,仍然为空......我的直觉是它是否需要一个字符串或 objectId .. 很确定我尝试了两种方式 // var _id = mongoose.Types.ObjectId(id ); // 尝试转换字符串 id (?) 【参考方案1】:您不应在您的Course.findOne
通话中使用__id
- 使用_id: _id
:
Course.findOne(_id: _id);
【讨论】:
仍然返回 null...有什么想法吗?【参考方案2】:尝试将__id
替换为id
。
Course.findOne(_id: id);
【讨论】:
以上是关于Mongoose:尝试使用 (id) 检索文档 - 获取 NULL的主要内容,如果未能解决你的问题,请参考以下文章
找不到 id 并更新和增加子文档 - 返回 null Mongoose/mongoDB
如何在 Mongoose 的嵌入式文档中检索数组的最后一个对象?
如何在 Mongoose 的嵌入式文档中检索数组的最后一个对象?
使用 Typescript 在 Mongoose 中缺少子文档方法