修改Mongoose Map中参数后未同步到MongoDB的问题如何解决
Mongoose Map嵌套属性修改不持久化问题解决方案
问题根因
你修改的仅为Mongoose查询返回的内存级文档副本,Mongoose默认不会自动检测Map类型字段内的深层属性变更,且你未执行写入数据库的持久化操作,因此修改仅存在于本地内存,不会同步到MongoDB数据库。
解决方法
方法1:先查改后手动标记变更再保存
修改属性后手动标记opentickets字段为已修改,再调用save()方法持久化到数据库,代码示例:
const queryTicketSchema = await GuildTicketsSchema.findOne({ _id: message.guild.id }); // 修改属性 queryTicketSchema.get(`opentickets`).get(`${message.channel.id}`).ticketstatus = 'closed'; // 手动标记Map字段变更 queryTicketSchema.markModified('opentickets'); // 执行保存操作同步到数据库 await queryTicketSchema.save();
方法2:直接使用原子更新操作(更推荐)
不需要先查询文档,直接通过findOneAndUpdate配合$set操作符完成数据库层面的原子更新,并发安全且性能更高,代码示例:
await GuildTicketsSchema.findOneAndUpdate( { _id: message.guild.id }, { $set: { [`opentickets.${message.channel.id}.ticketstatus`]: 'closed' } } );
内容的提问来源于stack exchange,提问作者Mihir Garg
相关产品推荐
相关产品推荐

