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

Cách tìm tài liệu theo _id trong MongoDB

Giới thiệu

Để tìm tài liệu theo _id trong MongoDB, bạn sử dụng phương thức find() với filter trên trường _id. Lưu ý _id mặc định là ObjectId, cần dùng constructor ObjectId().

Cú pháp

db.tenCollection.find({ "_id": ObjectId("chuoi_id_24_ky_tu") });

Ví dụ minh họa

1. Tạo collection

> db.timTheoId.insertOne({ "TenKhachHang": "Larry", "TuoiKhachHang": 26 });
{ "acknowledged" : true, "insertedId" : ObjectId("5c9dc2c875e2eeda1d5c3671") }
> db.timTheoId.insertOne({ "TenKhachHang": "Bob", "TuoiKhachHang": 20 });
{ "acknowledged" : true, "insertedId" : ObjectId("5c9dc2d175e2eeda1d5c3672") }
> db.timTheoId.insertOne({ "TenKhachHang": "Carol", "TuoiKhachHang": 22 });
{ "acknowledged" : true, "insertedId" : ObjectId("5c9dc2d775e2eeda1d5c3673") }
> db.timTheoId.insertOne({ "TenKhachHang": "David", "TuoiKhachHang": 24 });
{ "acknowledged" : true, "insertedId" : ObjectId("5c9dc2e375e2eeda1d5c3674") }

2. Tìm tài liệu với _id cụ thể

> db.timTheoId.find({ "_id": ObjectId("5c9dc2d175e2eeda1d5c3672") }).pretty();

3. Kết quả

{ "_id" : ObjectId("5c9dc2d175e2eeda1d5c3672"), "TenKhachHang" : "Bob", "TuoiKhachHang" : 20 }

Phương pháp thay thế: findOne() (Hiệu quả hơn)

Vì _id là unique, nên dùng findOne() thay vì find():

> db.timTheoId.findOne({ "_id": ObjectId("5c9dc2d175e2eeda1d5c3672") });

Với _id tùy chỉnh (không phải ObjectId)

Nếu _id là string, number, hoặc custom value:

// _id là string
db.collection.find({ "_id": "custom-id-123" });

// _id là number
db.collection.find({ "_id": 1001 });

Trong Application (Driver)

Ngôn ngữCách tạo ObjectId
Node.jsnew ObjectId("5c9dc2d175e2eeda1d5c3672")
Python (PyMongo)ObjectId("5c9dc2d175e2eeda1d5c3672")
Javanew ObjectId("5c9dc2d175e2eeda1d5c3672")
C#ObjectId.Parse("5c9dc2d175e2eeda1d5c3672")
Go (mongo-go-driver)primitive.ObjectIDFromHex("5c9dc2d175e2eeda1d5c3672")

Lưu ý quan trọng

  • Luôn dùng ObjectId() constructor cho _id mặc định, KHÔNG** so sánh string trực tiếp
  • Sai: { "_id": "5c9dc2d175e2eeda1d5c3672" } (string ≠ ObjectId)
  • Đúng: { "_id": ObjectId("5c9dc2d175e2eeda1d5c3672") }
  • _id có index unique mặc định, truy vấn rất nhanh O(1)