如何将所有现有文档的 _id 字段从类型字符串转换为数字

W.M*_*.M. 4 mongodb datatypes type-conversion

在我的一个系列中,我有一个_id存储数字的字段。该字段最初在 Mongoose 模型中定义为String。但是,集合中有关此字段的所有数据都包含存储为字符串的纯整数。我想保留集合中的所有数据,同时将此字段(以及所有关联_id的)的类型从 type 转换String为 type Number。关于如何做到这一点的任何建议?谢谢。

tit*_*geo 6

db.getCollection('test').find().forEach(function (doc) {
    db.getCollection('test').remove({ _id : doc._id});
    tempId = new NumberLong(doc._id);
    doc._id = tempId;
    db.getCollection('test').save(doc);
    } 
);
Run Code Online (Sandbox Code Playgroud)

这会做。您可能希望根据您的用例添加错误处理。还要确保在迁移之前有备份。

  • 谢谢。我还建议推迟对现有文档的实际删除,直到数据复制完成(即在使用新的 _id 类型创建新文档之后),然后才通过以下方式删除所有旧文档:`.remove({ $type : x })`可以在此处找到有关 MongoDB 类型的更多信息:https://docs.mongodb.org/manual/reference/operator/query/type/ (2认同)