Mongoose用户模型cart字段数据存储异常问题咨询
问题分析与解决方案
嘿,我一眼就看到问题出在你的Mongoose模型定义上啦!
你现在的cart字段定义是这样的:
cart:[ {qty:{type:Number,required:true}}, {product:{type:String,required:true}} ]
这相当于告诉Mongoose:cart是一个数组,数组里的每一项要么是只包含qty的对象,要么是只包含product的对象——而不是你想要的「每个数组元素同时包含qty和product两个字段」。
当你插入{product:'lamp', qty:4}这个对象时,Mongoose会尝试把它匹配到你定义的数组结构里:它只找到了qty字段符合第一个子对象的定义,所以只保存了qty那部分,product字段因为不在第一个子对象的结构里,直接被忽略了。另外,Mongoose默认会给每个子文档自动添加_id字段,这就是你看到数据库里cart数组元素只有_id和qty的原因。
修正后的模型定义
你需要把cart的结构改成「数组中的每个元素是一个同时包含qty和product的对象」,像这样:
const mongoose = require('mongoose'); const Schema = mongoose.Schema; const userSchema = new Schema({ name:{ type:String, required: true }, cart:[ { qty:{type:Number,required:true}, product:{type:String,required:true} } ] }); module.exports= mongoose.model('user',userSchema);
验证插入效果
现在再用你原来的插入代码:
const cart = {product:'lamp', qty:4}; const utente = new User({ name:'mario', cart:cart }); utente.save()
数据库里的cart数组就会正常保存成:
cart: [ { _id: 5f06e8140a3290711bb76820, qty: 4, product: "lamp" } ]
完全符合你的预期啦!
内容的提问来源于stack exchange,提问作者user10663534
相关产品推荐
相关产品推荐

