Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Khác biệt giữa NumberLong(x) và NumberLong("x") trong MongoDB

Sự khác biệt chính

NumberLong(x) (không dấu ngoặc kép) coi tham số là số JavaScript 64-bit, dẫn đến làm tròn khi vượt quá giới hạn an toàn của số nguyên (Number.MAX_SAFE_INTEGER = 9,007,199,254,740,991).

NumberLong("x") (có dấu ngoặc kép) coi tham số là chuỗi, bảo toàn độ chính xác của số nguyên 64-bit lớn.

Ví dụ minh họa

> db.demo603.insert({ "longValue": NumberLong(988998985857575789) });
WriteResult({ "nInserted": 1 })
> db.demo603.insert({ "longValueInString": NumberLong("988998985857575789") });
WriteResult({ "nInserted": 1 })

Kết quả truy vấn

> db.demo603.find().pretty();

Kết quả:

{
  "_id": ObjectId("5e9605e5ed011c280a0905d1"),
  "longValue": NumberLong("988998985857575808")  // Đã bị làm tròn
}
{
  "_id": ObjectId("5e9605faed011c280a0905d2"),
  "longValueInString": NumberLong("988998985857575789")  // Giữ nguyên giá trị
}

Kết luận: Luôn sử dụng NumberLong("giá_trị") với chuỗi khi làm việc với số nguyên lớn (> 2^53) để tránh mất độ chính xác.