Khi chuyển đổi chuỗi sang float trong MongoDB, dùng parseFloat() thay vì ép kiểu trực tiếp. Tạo collection với giá trị chuỗi:
> db.demo523.insertOne({"details":{"values":"-0.45"}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e89b7efb3fbf26334ef611f") }
Hiển thị dữ liệu (values là string "-0.45"):
> db.demo523.find();
Kết quả:
Sử dụng
forEachduyệt cursor,parseFloat()chuyển đổi,save()ghi đè tài liệu:> db.getCollection('demo523').find({}).forEach( function(d) { d.details.values = parseFloat( d.details.values ); db.getCollection('demo523').save(d); } );Kiểm tra lại - values giờ là number -0.45:
> db.demo523.find();Kết quả:
Giải thích: MongoDB shell là JavaScript engine,
parseFloat()chuyển chuỗi thành số IEEE 754. Nếu dùngNumber()hoặc+valuecũng được nhưngparseFloatan toàn hơn với chuỗi không hợp lệ (trả về NaN).Cách tốt hơn (MongoDB 4.0+): Dùng aggregation
$toDoublehoặc$convertđể chuyển đổi trong query mà không sửa dữ liệu gốc:db.demo523.aggregate([{ $project: { "details.values": { $toDouble: "$details.values" } } }])Lưu ý:
db.eval()vàforEach()+save()đã deprecated, không dùng cho production.