ใช้ Dot Notation ร่วมกับดัชนีอาร์เรย์ (Array Index) เพื่อค้นหาเอกสารที่ element แรก (หรือตำแหน่งที่กำหนด) ของอาร์เรย์ตรงกับค่าที่ต้องการ
สร้างคอลเลกชันและข้อมูลตัวอย่าง
> db.arrayStartsWithElementDemo.insertOne({"PlayerName":"Chris","PlayerScore":[780,9000,456,789,987]});
{ "acknowledged": true, "insertedId": ObjectId("5cd29fed345990cee87fd889") }
> db.arrayStartsWithElementDemo.insertOne({"PlayerName":"Robert","PlayerScore":[890,670,890,54646,42424]});
{ "acknowledged": true, "insertedId": ObjectId("5cd2a00c345990cee87fd88a") }
> db.arrayStartsWithElementDemo.insertOne({"PlayerName":"David","PlayerScore":[909090,896555,3344433,78900]});
{ "acknowledged": true, "insertedId": ObjectId("5cd2a025345990cee87fd88b") }
แสดงข้อมูลทั้งหมด
> db.arrayStartsWithElementDemo.find().pretty();
ผลลัพธ์:
{
"_id": ObjectId("5cd29fed345990cee87fd889"),
"PlayerName": "Chris",
"PlayerScore": [780, 9000, 456, 789, 987]
}
{
"_id": ObjectId("5cd2a00c345990cee87fd88a"),
"PlayerName": "Robert",
"PlayerScore": [890, 670, 890, 54646, 42424]
}
{
"_id": ObjectId("5cd2a025345990cee87fd88b"),
"PlayerName": "David",
"PlayerScore": [909090, 896555, 3344433, 78900]
}
ค้นหาเอกสารที่อาร์เรย์เริ่มต้นด้วย 890 ตามด้วย 670
ระบุดัชนี 0 และ 1 ผ่าน Dot Notation:
> db.arrayStartsWithElementDemo.find({"PlayerScore.0": 890, "PlayerScore.1": 670}).pretty();
ผลลัพธ์ (เฉพาะ Robert ที่ตรงเงื่อนไข):
{
"_id": ObjectId("5cd2a00c345990cee87fd88a"),
"PlayerName": "Robert",
"PlayerScore": [890, 670, 890, 54646, 42424]
}
รายละเอียดเทคนิค
"PlayerScore.0"หมายถึง element ตำแหน่งที่ 1 (index 0)"PlayerScore.1"หมายถึง element ตำแหน่งที่ 2 (index 1)- สามารถต่อยอดได้ไม่จำกัด เช่น
"PlayerScore.2","PlayerScore.3"ฯลฯ - ใช้ได้กับอาร์เรย์ของค่า primitives และอาร์เรย์ของอ็อบเจกต์ (เช่น
"items.0.name") - Query นี้ใช้ Index ได้หากสร้าง Index บนฟิลด์พร้อมดัชนี (เช่น
db.coll.createIndex({"PlayerScore.0": 1}))