ObjectId 转换诊断说明
当前行为
当前运行时默认按值转换 ObjectId。查询条件、写入载荷和聚合管道在递归遍历到合法 24 位十六进制字符串时,都可能转换为 ObjectId。
请把 autoConvertObjectId 作为实例级转换开关使用:
如果某条路径必须保留任意 24 位十六进制字符串,可以设置为 false,也可以使用 { enabled: false }。如果只是特定字段需要保留字符串,可以使用 excludeFields、{ fieldName: false } 或 maxDepth。
如何验证转换
因为转换器不会输出转换日志,建议通过以下方式验证:
- 编写集成测试,写入或查询已知值后检查实际存储或匹配结果。
- 在应用测试环境使用 MongoDB command monitoring,检查发送给驱动的命令。
- 在适配器单元测试中直接调用转换器验证行为。
聚焦检查示例:
配置参考
常见问题
可以启用 ObjectId 转换日志吗?
不可以。当前转换器没有转换日志输出,也没有 silent / verbose 控制项。
可以排除特定字段不转换吗?
可以。如果交易哈希、幂等键、签名、外部支付单号等业务值可能长得像 ObjectId,请使用 excludeFields 或 { fieldName: false }。只有当整个实例都必须完全保留字符串时,才使用 autoConvertObjectId: false。
转换是否基于字段白名单?
不是。当前稳定行为按值判断。只要递归遍历到合法 ObjectId 形态的字符串,它就可能被转换,不论字段名是什么。