Để xác định vị trí (thứ tự) của một tài liệu tương đối so với toàn bộ collection theo một tiêu chí sắp xếp, bạn có thể kết hợp find() với sort() và count(). Cách này đếm số lượng tài liệu đứng trước tài liệu mục tiêu theo thứ tự sắp xếp.
1. Tạo bộ sưu tập và chèn dữ liệu
> db.demo47.insertOne({ "ClientName": "Adam" });
> db.demo47.insertOne({ "ClientName": "John" });
> db.demo47.insertOne({ "ClientName": "Chris" });
> db.demo47.insertOne({ "ClientName": "Sam" });
2. Xem dữ liệu (mặc định theo thứ tự _id)
> db.demo47.find();
Kết quả:
{ "_id": ObjectId("..."), "ClientName": "Adam" }
{ "_id": ObjectId("..."), "ClientName": "John" }
{ "_id": ObjectId("..."), "ClientName": "Chris" }
{ "_id": ObjectId("..."), "ClientName": "Sam" }
3. Tìm vị trí của tài liệu có ClientName = "John" khi sắp xếp theo tên A-Z
Đếm số tài liệu có ClientName nhỏ hơn "John" theo thứ tự bảng chữ cái:
> db.demo47.find({ ClientName: { $lt: "John" } }).sort({ ClientName: 1 }).count();
4. Kết quả
2
Giải thích: Khi sắp xếp A-Z: Adam, Chris, John, Sam. Có 2 tài liệu (Adam, Chris) đứng trước John -> vị trí là 2 (tính từ 0) hoặc thứ 3 (tính từ 1).
Lưu ý: count() đã deprecated trong shell mới, dùng countDocuments() hoặc estimatedDocumentCount().