MongoDB Compass修改_id类型时触发findAndModify执行器错误求助
解决MongoDB Compass修改_id字段类型报错问题
MongoDB中的_id字段是不可变字段,文档创建后无法直接修改其值或类型,这就是你在Compass中尝试修改时触发Plan executor error during findAndModify :: caused by :: Performing an update on the path '_id' would modify the immutable field '_id'错误的原因。
以下是可行的解决方法:
单个文档修改
- 在Compass中查询出目标文档,复制除
_id外的所有字段内容
- 在Compass中查询出目标文档,复制除
- 删除该原文档
- 点击"插入文档",粘贴复制的内容,手动设置新类型的
_id值后保存
- 点击"插入文档",粘贴复制的内容,手动设置新类型的
批量文档修改(通过MongoSH)
如果需要批量转换_id字段类型,可在Compass的MongoSH Shell中执行脚本(执行前务必备份数据):
// 替换为你的集合名称 const collection = db.getCollection('your_collection_name'); collection.find().forEach(doc => { // 复制原文档并移除旧_id const newDoc = {...doc}; delete newDoc._id; // 这里示例将字符串类型_id转为ObjectId,根据你的需求修改类型转换逻辑 // 比如转数字:newDoc._id = Number(doc._id) newDoc._id = ObjectId(doc._id); // 插入新文档并删除原文档 collection.insertOne(newDoc); collection.deleteOne({_id: doc._id}); });
注意:确保新的
_id值在集合中唯一,否则会插入失败;根据实际需求调整_id的类型转换代码。
内容的提问来源于stack exchange,提问作者Smit Rakholiya
相关产品推荐
相关产品推荐

