ใช้ .length ใน MongoDB Shell
วิธีง่ายที่สุดในการนับจำนวนสมาชิกในอาร์เรย์คือใช้ property .length บนผลลัพธ์ของ findOne()
ตัวอย่างข้อมูล
> db.demo440.insertOne({ "Name": "Chris", "ListOfFriends": ["John", "Sam", "Mike"] });
> db.demo440.insertOne({ "Name": "David", "ListOfFriends": ["Mike", "Bob", "Carol"] });
Query นับจำนวนเพื่อนของ David
> db.demo440.findOne({ 'Name': 'David' }).ListOfFriends.length;
ผลลัพธ์
3
วิธีอื่นๆ สำหรับนับใน Aggregation
// ใช้ $size ใน aggregation (MongoDB 3.2+)
db.demo440.aggregate([
{ $match: { Name: "David" } },
{ $project: { friendCount: { $size: "$ListOfFriends" } } }
]);
// ใช้ $cond กับ $size สำหรับ handle null/missing array
db.demo440.aggregate([
{ $project: { friendCount: { $cond: { if: { $isArray: "$ListOfFriends" }, then: { $size: "$ListOfFriends" }, else: 0 } } } }
]);
เปรียบเทียบวิธี
| วิธี | เหมาะสำหรับ | ข้อจำกัด |
|---|---|---|
| .length (shell) | Ad-hoc query, ตรวจสอบเร็ว | ใช้ได้เฉพาะใน shell, ต้อง findOne ก่อน |
| $size (aggregation) | ใน pipeline, รายงาน, dashboard | error ถ้าฟิลด์ไม่ใช่อาร์เรย์ |
| $cond + $size | ข้อมูลไม่สม่ำเสมอ (อาจ null/ขาดหาย) | ซับซ้อนกว่า |