首页 > 解决方案 > Mongoose:使用“1”作为 Schema.Types.ObjectId 的值创建模型

问题描述

我试图做的是以下,我将我的模型定义为:

const channelSchema= new Schema({
    name:{type: String},
    country_id:{type: Schema.Types.ObjectId, ref: 'country'}
})

const countrySchema = new Schema({
    _id{ type : Number }
    name: { type: String }, 
    gmt: { type: String }
})

现在,当我创建一个新的 countrySchema 时,我使用个性化的“_id”,例如 1 或 2,总是一个数字等等,这是以 0 个错误创建的。我的问题是当我尝试创建一个新的频道模式时,使用

country_id = "1"

或者

country_id = 1

我得到错误:

'Cast to ObjectID failed for value "1" at path "country_id"'

我从猫鼬文档中读到的,ObjectId 是用 12 字节创建的(默认情况下)。我的问题是:有没有办法避免必须使用 12 字节密钥,并使用“1”作为 ObjectId,以便我可以用国家/地区填充频道?
重要提示:我正在使用 Node.Js、猫鼬和 express

标签: node.jsmongodbexpressmongoose

解决方案


如果要引用关系,需要在关系的两边设置相同的类型。在这种情况_idcountry被声明为Number,所以country_id也应该Number

  country_id: { type: Number, ref: 'country' }

推荐阅读