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

MongoDB findOne() có hoạt động với _id kiểu long không?

Có, MongoDB hỗ trợ kiểu NumberLong() cho trường _id và findOne() hoạt động bình thường.

Tạo collection với _id kiểu NumberLong

> db.demo618.insertOne({_id:NumberLong("6336366454"), Name:"Chris"});
{ "acknowledged" : true, "insertedId" : NumberLong("6336366454") }
> db.demo618.insertOne({_id:NumberLong("6336366455"), Name:"David"});
{ "acknowledged" : true, "insertedId" : NumberLong("6336366455") }
> db.demo618.insertOne({_id:NumberLong("6336366456"), Name:"Bob"});
{ "acknowledged" : true, "insertedId" : NumberLong("6336366456") }

Hiển thị tất cả

> db.demo618.find();

Kết quả:

{
  "_id" : NumberLong("6336366454"), "Name" : "Chris"
}
{
  "_id" : NumberLong("6336366455"), "Name" : "David"
}
{
  "_id" : NumberLong("6336366456"), "Name" : "Bob"
}

Truy vấn findOne với NumberLong

> db.demo618.findOne({_id: NumberLong("6336366454")});

Kết quả:

{
  "_id" : NumberLong("6336366454"), "Name" : "Chris"
}

Điểm quan trọng:

  • Phải dùng NumberLong("giá_trị") cả khi insert và khi query
  • Nếu query bằng số thường {_id: 6336366454} sẽ không tìm thấy do khác kiểu dữ liệu
  • NumberLong là kiểu 64-bit integer, phù hợp cho ID lớn (như Snowflake ID, timestamp milliseconds)
  • Trong driver Node.js, dùng Long.fromString() hoặc new Long() từ package long