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

วิธีโปรเจกต์ฟิลด์เฉพาะจากเอกสารภายในอาร์เรย์ใน MongoDB

เพื่อโปรเจกต์ฟิลด์เฉพาะจากเอกสารภายในอาร์เรย์ สามารถใช้ตัวดำเนินการตำแหน่ง $ (Positional Operator) ได้

ตัวอย่างการใช้งาน

สร้างคอลเลกชันพร้อมเอกสารที่มีอาร์เรย์ StudentDetails:

> db.projectSpecificFieldDemo.insertOne(
... {
...   "UniqueId": 101,
...   "StudentDetails" : [
...     {"StudentName" : "Chris", "StudentCountryName " : "US"},
...     {"StudentName" : "Robert", "StudentCountryName" : "UK"}
...   ]
... }
... );
{ "acknowledged" : true, "insertedId" : ObjectId("5ca27aeb6304881c5ce84ba2") }
> db.projectSpecificFieldDemo.insertOne(
... {
...   "UniqueId": 102,
...   "StudentDetails" : [
...     {"StudentName" : "Robert", "StudentCountryName " : "UK"},
...     {"StudentName" : "David", "StudentCountryName" : "AUS"}
...   ]
... }
... );
{ "acknowledged" : true, "insertedId" : ObjectId("5ca27b106304881c5ce84ba3") }

แสดงเอกสารทั้งหมด:

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

ผลลัพธ์:

{ "_id" : ObjectId("5ca27aeb6304881c5ce84ba2"), "UniqueId" : 101, "StudentDetails" : [
    { "StudentName" : "Chris", "StudentCountryName " : "US" },
    { "StudentName" : "Robert", "StudentCountryName" : "UK" }
] }
{ "_id" : ObjectId("5ca27b106304881c5ce84ba3"), "UniqueId" : 102, "StudentDetails" : [
    { "StudentName" : "Robert", "StudentCountryName " : "UK" },
    { "StudentName" : "David", "StudentCountryName" : "AUS" }
] }

คำสั่งโปรเจกต์ฟิลด์เฉพาะจากเอกสารในอาร์เรย์ (ค้นหา UniqueId=101 และ StudentName=Chris):

> var myDocument = { UniqueId : 101, 'StudentDetails.StudentName' : 'Chris' };
> var myProjection= {'StudentDetails.$': 1 };
> db.projectSpecificFieldDemo.find(myDocument , myProjection).pretty();

ผลลัพธ์ (แสดงเฉพาะเอกสารในอาร์เรย์ที่ตรงเงื่อนไข):

{ "_id" : ObjectId("5ca27aeb6304881c5ce84ba2"), "StudentDetails" : [
    { "StudentName" : "Chris", "StudentCountryName " : "US" }
] }

หมายเหตุ: ตัวดำเนินการ $ จะคืนค่าเฉพาะองค์ประกอบแรกในอาร์เรย์ที่ตรงกับเงื่อนไขการค้นหา