เพื่อจับคู่เอกสารที่มีฟิลด์อาร์เรย์ ให้ใช้ตัวดำเนินการ $elemMatch มาสร้างคอลเล็กชันกันเถอะ
> db.demo592.insertOne(
{
"id":101,
"details" : [
{ "Name" : "Chris", "Value" : "200"},
{"Name" : "David", "Value" : "800"}
]
}
);
{ "acknowledged" : true, "insertedId" : ObjectId("5e930d8ffd2d90c177b5bcd6") }
> db.demo592.insertOne(
{
id:102,
"details" : [
{ "Name" : "Chris", "Value" : "500"},
{"Name" : "David", "Value" : "900"}
]
}
);
{ "acknowledged" : true, "insertedId" : ObjectId("5e930d90fd2d90c177b5bcd7") }
แสดงเอกสารทั้งหมดด้วยเมธอด find()
> db.demo592.find();
ผลลัพธ์ที่ได้
{ "_id" : ObjectId("5e930d8ffd2d90c177b5bcd6"), "id" : 101, "details" : [ { "Name" : "Chris", "Value" : "200" }, { "Name" : "David", "Value" : "800" } ] }
{ "_id" : ObjectId("5e930d90fd2d90c177b5bcd7"), "id" : 102, "details" : [ { "Name" : "Chris", "Value" : "500" }, { "Name" : "David", "Value" : "900" } ] }
คำสั่งจับคู่ (Chris Value >= 500 และ David Value >= 600)
> db.demo592.find(
{
"$and" : [
{ "details" : { "$elemMatch" : { "Name" : "Chris", "Value" : { "$gte" : "500" } } } },
{ "details" : { "$elemMatch" : { "Name" : "David", "Value" : { "$gte" : "600" } } } }
]
}
);
ผลลัพธ์ที่ได้
{ "_id" : ObjectId("5e930d90fd2d90c177b5bcd7"), "id" : 102, "details" : [ { "Name" : "Chris", "Value" : "500" }, { "Name" : "David", "Value" : "900" } ] }