หากต้องการค้นหารายการล่าสุดในอาร์เรย์ของเอกสารทั้งหมด ให้ใช้ aggregate() ให้เราสร้างคอลเลกชันที่มีเอกสาร -
> db.demo179.insertOne( ...{ ... "Name":"Chris", ... "Details": [ ... { ... "Id":101, ... "Subject":"MongoDB" ... }, ... { ... "Id":102, ... "Subject":"MySQL" ... } ... ] ...} ...); { "acknowledged" : true, "insertedId" : ObjectId("5e3980299e4f06af551997f9") } > db.demo179.insertOne( ...{ ... "Name":"David", ... "Details": [ ... { ... "Id":103, ... "Subject":"Java" ... }, ... { ... "Id":104, ... "Subject":"C" ... } ... ] ...} ...); { "acknowledged" : true, "insertedId" : ObjectId("5e39802a9e4f06af551997fa") }
แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -
> db.demo179.find().pretty();
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : ObjectId("5e3980299e4f06af551997f9"), "Name" : "Chris", "Details" : [ { "Id" : 101, "Subject" : "MongoDB" }, { "Id" : 102, "Subject" : "MySQL" } ] } { "_id" : ObjectId("5e39802a9e4f06af551997fa"), "Name" : "David", "Details" : [ { "Id" : 103, "Subject" : "Java" }, { "Id" : 104, "Subject" : "C" } ] }
ต่อไปนี้เป็นแบบสอบถามเพื่อค้นหารายการล่าสุดในอาร์เรย์ของเอกสารทั้งหมด -
> db.demo179.aggregate([ ... { "$unwind": "$Details" }, ... { "$sort": { "Details.Id": -1 } }, ... { "$limit": 2 }, ... { ... "$group": { ... "_id": "$Details.Id", ... "Name" : { "$first": "$Name" }, ... "Details": { "$push": "$Details" } ... } ... }, ... { ... "$project": { ... "_id": 0, "Name": 1, "Details": 1 ... } ... } ...])
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "Name" : "David", "Details" : [ { "Id" : 103, "Subject" : "Java" } ] } { "Name" : "David", "Details" : [ { "Id" : 104, "Subject" : "C" } ] }