【发布时间】: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 (?)
标签: javascript mongodb mongoose orm mongodb-query