You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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'错误的原因。

以下是可行的解决方法:

单个文档修改

    1. 在Compass中查询出目标文档,复制除_id外的所有字段内容
    1. 删除该原文档
    1. 点击"插入文档",粘贴复制的内容,手动设置新类型的_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 12:22:10