Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

MongoDB Query: ค้นหาเอกสารที่อาร์เรย์เริ่มต้นด้วยค่าเฉพาะ

ใช้ 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}))