ใช้ Operator $size ใน Aggregation Pipeline เพื่อหาขนาดของ Internal Array (Array ภายใน Document)
ไวยากรณ์
db.internalArraySizeDemo.aggregate([
{
$group: {
_id: yourObjectIdValue,
anyFieldName: {$first: {$size: "$yourArrayName"}}
}
}
]);
สร้างข้อมูลตัวอย่าง
> db.internalArraySizeDemo.insertOne({"EmployeeName":"Mike","EmployeeTechnology":["Java Web Development","Python Web Development"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5c6eff586fd07954a48906b2") }
> db.internalArraySizeDemo.insertOne({"EmployeeName":"Sam","EmployeeTechnology":["C with Graphics","Game Development with C++ Language","MatLab"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5c6effcd6fd07954a48906b3") }
แสดงเอกสารทั้งหมด
> db.internalArraySizeDemo.find().pretty();
Query ขนาด Array ของ EmployeeName = Mike (_id เฉพาะ)
> db.internalArraySizeDemo.aggregate([
{
$group: {
_id: ObjectId("5c6eff586fd07954a48906b2"),
EmployeeTechnology_count: {$first: {$size: "$EmployeeTechnology"}}
}
}
]);
ผลลัพธ์
{ "_id" : ObjectId("5c6eff586fd07954a48906b2"), "EmployeeTechnology_count" : 2 }
ใช้ $first ร่วม $size เพราะ $group ต้องการ Accumulator $size ใช้ใน $project หรือ $match ได้โดยตรง แต่ใน $group ต้องห่อด้วย Accumulator