Mongoose操作MongoDB向数组push数据时部分属性被忽略
问题原因
你定义的User Schema中reputation字段的结构存在错误:你将数组单条元素的4个字段拆分到了4个独立对象中,而非合并在同一个对象内,导致Mongoose的字段校验过滤逻辑将不在第一个匹配结构中的字段直接丢弃。
你当前的写法相当于告诉Mongoose:reputation是一个允许存储4种不同结构对象的数组,每类对象只包含单个对应字段。当你push包含多个字段的对象时,仅第一个匹配到的voter_id字段符合第一个结构的定义,剩余score、comment等字段不属于第一个结构的允许字段,会被直接过滤,因此入库后仅保留voter_id。
修复方案
将reputation数组的元素结构调整为单对象包含所有字段即可,正确的Schema写法如下:
reputation: [ { voter_id: { type: String, required: true, }, score: { type: Number, required: true, }, comment: { type: String, maxlength: 100, }, voted_at: { type: Date, default: Date.now, }, } ]
修改后重新执行updateOne操作,所有字段就能正常入库。
内容的提问来源于stack exchange,提问作者user9146023
相关产品推荐
相关产品推荐

