mongoose嵌套Schema问题

mongoose嵌套Schema问题

我发现如果mongoose的Schema中一个属性为Object,该属性内又定义了各种SchemaType,那么通过该Schema创建的model在插入数据时会存在错误。

const Schema = mongoose.Schema({
userId: {
type: String,
require: true
},
shopId:String,
shopName:String,
isCanceled: {
type: Boolean,
default: false
},

address:{
city: String,
department: String,
houseNumber: String,
name: String,
phone: String
},
products: [{
product: {
name: String,
imgUrl: String,
sales: Number,
price: Number,
tabs: [String]
},
orderSales:Number
}]
}, {
timestamps: true
})

如上图的address和product,当在插入数据时,在mongoose数据库中显示的数据如下图:

https://img1.sycdn.imooc.com//climg/615d8adf095e90f405330387.jpg


我通过定义子Schema的方式,可以解决数据无法正确显示的问题,但是插入数据会多出一个_id。

定义子Schema方式如下:

const addressSchema = mongoose.Schema({
city: String,
department: String,
houseNumber: String,
name: String,
phone: String
})

const productSchema = mongoose.Schema({
name: String,
imgUrl: String,
sales: Number,
price: Number,
tabs: [String]
})

const Schema = mongoose.Schema({
userId: {
type: String,
require: true
},
shopId:String,
shopName:String,
isCanceled: {
type: Boolean,
default: false
},

address:{
type: addressSchema
},
products: [{
product: {
type: productSchema
},
orderSales:Number
}]
}, {
timestamps: true
})

https://img1.sycdn.imooc.com//climg/615d8c030993387205320601.jpg

子Schema中未定义_id,为何此时会多出一个_id​?

然而,在老师视频中依靠嵌套的方法可以正确插入数据,这个问题是由什么导致?如果不使用子Schema的方式,如何解决该问题?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕慕子 2021-10-08 10:27:53

同学你好,对于你的问题解答如下:

1、添加到数据库时,会给子Schema中添加一个默认的id作为唯一的标识

2、猜测是由于同学与讲师使用的mongoose版本不一致导致的,新版本的Schema中嵌套子Schema时,需要先声明子Schema。

3、同学的这种解决方式很棒了,目前暂时没有其他解决方式。

祝学习愉快~



问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师