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

ค้นหาค่าที่ตรงกันในอาร์เรย์โดยไม่ใช้ $elemMatch ใน MongoDB

ใช้ตัวดำเนินการ $eq เพื่อจับคู่อาร์เรย์ทั้งหมด (exact array match) โดยไม่ต้องใช้ $elemMatch เริ่มต้นด้วยการสร้างคอลเลกชันตัวอย่าง:

> db.equalDemo.insertOne({_id:1,"StudentFriendNames":["John","Carol","Sam"]});
{ "acknowledged" : true, "insertedId" : 1 }
> db.equalDemo.insertOne({_id:2,"StudentFriendNames":null});
{ "acknowledged" : true, "insertedId" : 2 }
> db.equalDemo.insertOne({_id:3,"StudentFriendNames":["Carol"]});
{ "acknowledged" : true, "insertedId" : 3 }
> db.equalDemo.insertOne({_id:4,"StudentFriendNames":["Sam"]});
{ "acknowledged" : true, "insertedId" : 4 }

แสดงเอกสาร:

> db.equalDemo.find();

คิวรี่ค้นหาเอกสารที่ StudentFriendNames เท่ากับอาร์เรย์ ["Carol"] ทุกประการ (ลำดับและจำนวนต้องตรง):

> db.equalDemo.find({"StudentFriendNames":{$eq:["Carol"]}});

สรุปการจับคู่อาร์เรย์:

  • {field: ["a", "b"]} หรือ {field: {$eq: ["a", "b"]}} - จับคู่อาร์เรย์ทั้งหมด (exact match)
  • {field: "a"} - จับคู่ถ้าอาร์เรย์มี "a" อยู่ (contains)
  • {field: {$elemMatch: {... - จับคู่ออบเจกต์ในอาร์เรย์ที่ตรงเงื่อนไขหลายอย่าง

ตัวอย่าง: เอกสาร _id:1 มี ["John","Carol","Sam"] ไม่ตรงกับ ["Carol"] เพราะความยาวและลำดับต่างกัน