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 NumberLonglà 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ặcnew Long()từ packagelong