mongoose嵌套Schema问题

mongoose嵌套Schema问题

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

1
const Schema = mongoose.Schema({<br>  userId: {<br>    type: String,<br>    require: true<br>  },<br>  shopId:String,<br>  shopName:String,<br>  isCanceled: {<br>    type: Boolean,<br>    default: false<br>  },<br><br>  address:{<br>    city: String,<br>    department: String,<br>    houseNumber: String,<br>    name: String,<br>    phone: String<br>  },<br>  products: [{<br>    product: {<br>      name: String,<br>      imgUrl: String,<br>      sales: Number,<br>      price: Number,<br>      tabs: [String]<br>    },<br>    orderSales:Number<br>  }]<br>}, {<br>  timestamps: true<br>})<br>

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

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


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

定义子Schema方式如下:

1
const addressSchema = mongoose.Schema({<br>  city: String,<br>  department: String,<br>  houseNumber: String,<br>  name: String,<br>  phone: String<br>})<br><br>const productSchema = mongoose.Schema({<br>  name: String,<br>  imgUrl: String,<br>  sales: Number,<br>  price: Number,<br>  tabs: [String]<br>})<br><br>const Schema = mongoose.Schema({<br>  userId: {<br>    type: String,<br>    require: true<br>  },<br>  shopId:String,<br>  shopName:String,<br>  isCanceled: {<br>    type: Boolean,<br>    default: false<br>  },<br><br>  address:{<br>    type: addressSchema<br>  },<br>  products: [{<br>    product: {<br>      type: productSchema<br>    },<br>    orderSales:Number<br>  }]<br>}, {<br>  timestamps: true<br>})<br>

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下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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