如何将mongodb字段数据类型从NumberLong更改为Double?

时间:2015-08-11 09:43:04

标签: mongodb double type-conversion

如何将mongodb字段数据类型从NumberLong更改为Double?

我尝试过没有成功:

db.getCollection('mycoll').find({'_id':10150097174480591}).forEach( function (x) { 
    x._id = new Double(x._id);
    db.getCollection('mycoll').save(x);
});

1 个答案:

答案 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();