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

การจับคู่ ID และดึงเอกสารด้วย $eq ในอาร์เรย์ MongoDB

ใช้ $eq ใน find() เพื่อค้นหาเอกสารที่อาร์เรย์มีค่าเฉพาะ

ตัวดำเนินการ $eq ระบุเงื่อนไข "เท่ากับ" ใช้ใน find() เพื่อค้นหาเอกสารที่อาร์เรย์มีค่าที่ต้องการ (MongoDB จะ match อัตโนมัติถ้าอาร์เรย์มีค่านั้น)

ตัวอย่างข้อมูลทดสอบ

> db.demo426.insert({ "Ids": ["110", "120", "101"] });
> db.demo426.insert({ "Ids": ["100", "201", "401"] });
> db.demo426.insert({ "Ids": ["501", "600", "700"] });

แสดงข้อมูลทั้งหมด

> db.demo426.find().pretty();

ผลลัพธ์:

{ "_id": ObjectId("..."), "Ids": ["110", "120", "101"] }
{ "_id": ObjectId("..."), "Ids": ["100", "201", "401"] }
{ "_id": ObjectId("..."), "Ids": ["501", "600", "700"] }

คำสั่งค้นหาเอกสารที่อาร์เรย์ Ids มีค่า "501"

> db.demo426.find({ "Ids": { $eq: "501" } });

ผลลัพธ์ที่ได้

{ "_id": ObjectId("5e75e527bbc41e36cc3cae74"), "Ids": ["501", "600", "700"] }

คำอธิบาย

  • { "Ids": { $eq: "501" } }: ค้นหาเอกสารที่ฟิลด์ Ids (ซึ่งเป็นอาร์เรย์) มีค่า "501" อยู่ในนั้น
  • MongoDB จะ match อัตโนมัติเมื่ออาร์เรย์มีค่าที่ตรงกับ $eq
  • เทียบเท่ากับ: { "Ids": "501" } (Implicit $eq)

ตัวดำเนินการอาร์เรย์อื่นๆ ที่เกี่ยวข้อง

ข้อสังเกต

  • $eq กับอาร์เรย์ = "มีค่านี้ในอาร์เรย์" (ไม่ใช่ "อาร์เรย์เท่ากับค่านี้")
  • ถ้าต้องการ match อาร์เรย์ทั้งชิ้น ให้ใช้ { Ids: ["501", "600", "700"] } (Exact array match)
  • สร้างดัชนีบนฟิลด์อาร์เรย์ได้: db.demo426.createIndex({ Ids: 1 }) (Multikey Index)
Operatorคำอธิบายตัวอย่าง
$eqมีค่าเท่ากับในอาร์เรย์{ tags: { $eq: "mongodb" } }
$inมีค่าใดค่าหนึ่งในรายการ{ tags: { $in: ["mongodb", "nosql"] } }
$allมีค่าครบทุกตัวในรายการ{ tags: { $all: ["mongodb", "nosql"] } }
$elemMatchมีออบเจกต์ในอาร์เรย์ match ทุกเงื่อนไข{ items: { $elemMatch: { price: {$gt: 10}, qty: {$lt: 5} } } }