ให้เราสร้างคอลเลกชันที่มีเอกสารก่อน -
> db.demo394.insertOne( ... { ... ... details: [ ... { ... _id: '1', ... startDate: '2018-01-11T07:00:00.000Z', ... endDate: '2019-01-12T07:59:59.999Z' ... }, ... { ... _id: '2', ... startDate: '2019-01-21T07:00:00.000Z', ... endDate: '2020-01-04T07:59:59.999Z' ... } ... ] ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e5e716817aa3ef9ab8ab202") }
แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -
> db.demo394.find();
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : ObjectId("5e5e716817aa3ef9ab8ab202"), "details" : [ { "_id" : "1", "startDate" : "2018-01-11T07:00:00.000Z", "endDate" : "2019-01-12T07:59:59.999Z" }, { "_id" : "2", "startDate" : "2019-01-21T07:00:00.000Z", "endDate" : "2020-01-04T07:59:59.999Z" } ] }
ต่อไปนี้เป็นวิธีการสืบค้นเอกสารตามเงื่อนไขในเอกสารย่อย -
> db.demo394.find({ ... $expr: { ... $let: { ... vars: { "d": { $arrayElemAt: [ "$details", -1 ] } }, ... in: { $eq: [ "$$d.endDate", "2020-01-04T07:59:59.999Z" ] } ... } ... } ... })
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : ObjectId("5e5e716817aa3ef9ab8ab202"), "details" : [ { "_id" : "1", "startDate" : "2018-01-11T07:00:00.000Z", "endDate" : "2019-01-12T07:59:59.999Z" }, { "_id" : "2", "startDate" : "2019-01-21T07:00:00.000Z", "endDate" : "2020-01-04T07:59:59.999Z" } ] }