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.js | new ObjectId("5c9dc2d175e2eeda1d5c3672") |
| Python (PyMongo) | ObjectId("5c9dc2d175e2eeda1d5c3672") |
| Java | new 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)