How to query documents by a condition on the subdocument in MongoDB?



Let us first create a collection with documents −

> 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") }

Display all documents from a collection with the help of find() method −

> db.demo394.find();

This will produce the following output −

{    "_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" }    ] }

Following is how to query documents by a condition on the subdocument −

> db.demo394.find({ ...    $expr: { ...       $let: { ...          vars: { "d": { $arrayElemAt: [ "$details", -1 ] } }, ...          in: { $eq: [ "$$d.endDate", "2020-01-04T07:59:59.999Z" ] } ...       } ...    } ... })

This will produce the following output −

{    "_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" }    ] }
Updated on: 2020-04-02T14:24:10+05:30

208 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements