我在MongoDB
中有一个变化大的数据集,其中有数字字段的文档。由于数据导入中存在一些问题,其中一些字段最终位于int32 datatype
,其中一些字段位于int64 datatype
。
我需要将它们全部转换为int32。由于许多字段是嵌套文档/数组,因此我无法使用MongoChef
或RoboMongo
来编辑字段并进行集合替换。
我的下一个最佳选择是什么?我是否需要编写一个循环遍历每个文档/字段的脚本,并明确地将它们强制转换为NumberInt()
。我可以在PHP or Python
中执行此操作,但我想知道是否有办法在不编写额外代码的情况下执行此操作。
有没有可以做到的mongoshell魔法?如果任何Mongo Masters能给我任何见解,我将不胜感激。
答案 0 :(得分:0)
对于希望这样做并来到这里的任何人。您可以运行
db.foo.find().forEach(doc => {
const newBar = bar.valueOf()
db.foo.update({
"_id" : doc._id
}, {
"$set" : {
"bar" : newBar
}
})
})
在mongo
shell中。在大型馆藏中这可能不可行。关键是在.valueOf()
上使用Int64
。您可能要检查这不会溢出