我有一个名为subcategory
的架构:
const subCategorySchema = new mongoose.Schema({
name: {
type: String,
required: true
},
description: {
type: String,
required: false
},
category: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Category',
required: true
},
image: {
type: String,
required: false
}
})
但是执行此操作时:const subCategoryRecord = await this.subCategoryModel.findById("idAsString")
我得到空
我读到了诸如this之类的其他问题
(在这里说我应该发送new ObjectId('id')
而不是string
)
但是我还有一个称为category
的模式,在通过发送字符串进行findById
的过程中我得到了结果,有什么区别?
这是类别架构:
const categorySchema = new mongoose.Schema({
name: {
type: String,
required: true
},
description: {
type: String,
required: false
},
image: {
type: String,
required: false
}
})
此作品:const category = await this.categoryModel.findById('categoryIdAsString')
答案 0 :(得分:0)
由于您尚未在_id
中指定Schema
字段,因此其类型为ObjectId
。对于findById
,您可以将id
作为String
传递,猫鼬会将其转换为ObjectId
进行查询。
由于您收到null
响应(没有强制转换错误),我认为您正在向查询传递有效的ObjectId
字符串,并且可能没有任何记录与提供的id
相匹配
您可以使用以下方法检查您是否传递了有效的id
。
mongoose.isValidObjectId(idAsString)
答案 1 :(得分:0)
即使使用“ type of”测试,_id也是一个对象,但它会说这是一个字符串。 就我而言,这适用于模型:
authorId: { type: mongoose.Schema.Types.ObjectId, ref: "users" }
如果您需要将_id与保存为字符串的id进行比较,也可以使用.equals()来返回布尔值:
user.userId.equals(checkUser._id)