如何将mongodb字段数据类型从NumberLong更改为Double?
我尝试过没有成功:
db.getCollection('mycoll').find({'_id':10150097174480591}).forEach( function (x) {
x._id = new Double(x._id);
db.getCollection('mycoll').save(x);
});
答案 0 :(得分:1)
"类型"对象需要重铸。更好的批量,并使用$type
过滤掉:
var bulk = db.users2.initializeOrderedBulkOp(),
count = 0;
db.mycoll.find({ "_id": { "$type": 18 } }).forEach(function(doc) {
doc._id = parseInt(doc._id.valueOf());
bulk.insert(doc);
count++;
if ( count % 1000 == 0 ) {
bulk.execute();
bulk = db.users2.initializeOrderedBulkOp();
}
});
if ( count % 1000 != 0 )
bulk.execute();
请注意,因为这是_id
,您需要另一个集合。如果您尝试使用其他字段并在同一集合中,则需要删除并重置"文档中的字段以实现更改:
var bulk = db.mycoll.initializeOrderedBulkOp(),
count = 0;
db.mycoll.find({ "a": { "$type": 18 } }).forEach(function(doc) {
doc.a = parseInt(doc.a.valueOf());
bulk.find({ "_id": doc._id }).updateOne({
"$unset": { "a": "" }
});
bulk.find({ "_id": doc._id }).updateOne({
"$set": { "a": doc.a }
});
count++;
if ( count % 500 == 0 ) {
bulk.execute();
bulk = db.mycoll.initializeOrderedBulkOp();
}
});
if ( count % 500 != 0 )
bulk.execute();