เพื่อโปรเจกต์ฟิลด์เฉพาะจากเอกสารภายในอาร์เรย์ สามารถใช้ตัวดำเนินการตำแหน่ง $ (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" }
] }
หมายเหตุ: ตัวดำเนินการ $ จะคืนค่าเฉพาะองค์ประกอบแรกในอาร์เรย์ที่ตรงกับเงื่อนไขการค้นหา