Mongoose/MongoDB含点号键名时更新操作失效问题咨询
解决含点号键名的Mongoose更新失效问题
当文档中存在带点号的键名(如testFile.js)时,直接用点分隔的字符串路径会被Mongoose误解析为嵌套层级,导致更新失效。可以通过方括号包裹带点号的键名来避免这个问题,让MongoDB正确识别这是一个完整的键名而非路径分隔符。
正确的更新代码示例:
const updatedFileTree = await this.fileTree .findByIdAndUpdate( { _id: id }, { $set: { 'test.directory["testFile.js"].file.contents': 'new value' } }, { new: true } // 可选:返回更新后的文档,默认返回更新前的文档 ) .exec(); return updatedFileTree;
原理说明:
MongoDB的查询与更新语法中,["键名"]的形式可明确指定包含特殊字符(如点号、空格)的键名,这样Mongoose就不会将testFile.js里的点号解析为嵌套路径分隔符,而是将其视为完整键名定位目标字段。
内容的提问来源于stack exchange,提问作者Arend
相关产品推荐
相关产品推荐

