คำนวณตำแหน่งสัมพัทธ์ของเอกสารในคอลเลกชัน
เพื่อหาว่าเอกสารอยู่ที่ตำแหน่งไหนเมื่อเรียงลำดับตามฟิลด์ใดฟิลด์หนึ่ง สามารถใช้ find() ร่วมกับ sort() และ count() ได้
ตัวอย่างข้อมูลทดสอบ
> db.demo47.insertOne({ "ClientName": "Adam" });
> db.demo47.insertOne({ "ClientName": "John" });
> db.demo47.insertOne({ "ClientName": "Chris" });
> db.demo47.insertOne({ "ClientName": "Sam" });
แสดงข้อมูลทั้งหมด
> db.demo47.find();
ผลลัพธ์ (เรียงตาม _id ใส่เข้าไป):
{ "_id": ObjectId("..."), "ClientName": "Adam" }
{ "_id": ObjectId("..."), "ClientName": "John" }
{ "_id": ObjectId("..."), "ClientName": "Chris" }
{ "_id": ObjectId("..."), "ClientName": "Sam" }
คำสั่งหาตำแหน่งของ "John" เมื่อเรียงตาม ClientName
> db.demo47.find({ ClientName: { $lt: "John" } }).sort({ ClientName: 1 }).count();
ผลลัพธ์: 2
คำอธิบาย
- { ClientName: { $lt: "John" } }: หาเอกสารที่ ClientName น้อยกว่า "John" (เรียงลำดับอักษร)
- .sort({ ClientName: 1 }): เรียงลำดับตาม ClientName น้อยไปมาก
- .count(): นับจำนวนเอกสารที่ตรงเงื่อนไข
ผลลัพธ์ 2 หมายถึง มีเอกสาร 2 รายการที่อยู่ "ก่อน" John เมื่อเรียงตาม ClientName (คือ Adam และ Chris)
ข้อควรระวัง
- วิธีนี้ให้ตำแหน่งสัมพัทธ์ (0-based index) ในชุดข้อมูลที่เรียงแล้ว
- ต้องใช้ sort() ให้ตรงกับเงื่อนไข $lt/$gt เพื่อให้ผลลัพธ์สอดคล้อง
- ใน MongoDB ใหม่ ควรใช้
countDocuments()แทนcount()ที่ deprecated แล้ว