skip to Main Content

I had array of objects in each object had startDate , endDate, ownnerID, ownerType.

I am getting the documents by uisng this below statement

var yesterdayDate = new Date();
yesterdayDate.setDate(yesterdayDate.getDate() - 1);
var next30daysDate = new Date();
next30daysDate.setDate(next30daysDate.getDate() + 29);
const insurances = await Insurances.find({endDate: {$gte: yesterdayDate, $lte: next30daysDate}});



 [
  {
    docIds: [ 6285c7ce9fb2940007e61ce2 ],
    _id: 6285c7cd9fb2940007e61cde,
    startDate: 2022-03-31T18:30:00.000Z,
    endDate: 2022-09-28T18:30:00.000Z,
    ownerId: 61de54e8ae38620006457674,
    ownerType: 'vendor',
    createdAt: 2022-05-19T04:30:06.040Z,
    updatedAt: 2022-09-06T09:42:37.497Z,
    __v: 0,
    name: 'download'
  },
  {
    docIds: [ 631edc3da1c7060007242fca ],
    _id: 631edc3da1c7060007242fc2,
    startDate: 2022-09-13T18:30:00.000Z,
    endDate: 2022-09-27T18:30:00.000Z,
    ownerId: 6156aeeb152a3040b82fbc50,
    ownerType: 'vendor',
    createdAt: 2022-09-12T07:14:05.616Z,
    updatedAt: 2022-09-12T12:04:57.897Z,
    __v: 0,
    name: 'bid manager'
  },
  {
    docIds: [ 631f203b71f6f042243bcb26 ],
    _id: 631f203871f6f042243bcb1f,
    startDate: 2022-09-13T06:30:00.000Z,
    endDate: 2022-09-29T06:30:00.000Z,
    name: 'Javascript Training',
    ownerId: 6156aeeb152a3040b82fbc50,
    ownerType: 'vendor',
    createdAt: 2022-09-12T12:04:10.938Z,
    updatedAt: 2022-09-12T12:04:11.557Z,
    __v: 0
  },
  {
    docIds: [ 631f203b71f6f042243bcb28 ],
    _id: 631f203871f6f042243bcb20,
    startDate: 2022-09-12T18:30:00.000Z,
    endDate: 2022-09-27T18:30:00.000Z,
    name: 'SP-UserAccounts-200622-1021',
    ownerId: 6156aeeb152a3040b82fbc50,
    ownerType: 'vendor',
    createdAt: 2022-09-12T12:04:10.943Z,
    updatedAt: 2022-09-12T12:04:47.312Z,
    __v: 0
  },
  {
    docIds: [ 632155e5488a188c34ba5473 ],
    _id: 632155e1488a188c34ba546f,
    startDate: 2022-09-13T06:30:00.000Z,
    endDate: 2022-09-24T06:30:00.000Z,
    name: 'bid-project-details',
    ownerId: 6253c6a067a5b83c84855f99,
    ownerType: 'vendor',
    createdAt: 2022-09-14T04:17:41.082Z,
    updatedAt: 2022-09-14T04:17:41.674Z,
    __v: 0
  },
  {
    docIds: [ 6321fe4317dfea0007e828fe ],
    _id: 6321fe2217dfea0007e828c9,
    startDate: 2022-09-14T00:00:00.000Z,
    endDate: 2022-09-15T00:00:00.000Z,
    ownerId: 5bca41cbe5a5c1808da49b1c,
    ownerType: 'vendor',
    createdAt: 2022-09-14T16:15:30.986Z,
    updatedAt: 2022-09-14T16:16:03.604Z,
    __v: 0
  },
  {
    docIds: [ 6321ff3e17dfea0007e829dc ],
    _id: 6321fe2217dfea0007e828c6,
    startDate: 2022-09-15T00:00:00.000Z,
    endDate: 2022-09-15T00:00:00.000Z,
    ownerId: 5bca41cbe5a5c1808da49b1c,
    ownerType: 'vendor',
    createdAt: 2022-09-14T16:15:31.215Z,
    updatedAt: 2022-09-14T16:20:14.721Z,
    __v: 0
  },
  {
    docIds: [ 6321fef84377f600061f7f43 ],
    _id: 6321fe2217dfea0007e828c8,
    startDate: 2022-09-14T00:00:00.000Z,
    endDate: 2022-09-24T00:00:00.000Z,
    ownerId: 5bca41cbe5a5c1808da49b1c,
    ownerType: 'vendor',
    createdAt: 2022-09-14T16:15:31.233Z,
    updatedAt: 2022-09-14T16:19:04.341Z,
    __v: 0
  },
  {
    docIds: [ 6321ff5c17dfea0007e829f7 ],
    _id: 6321fe2217dfea0007e828c7,
    startDate: 2022-09-14T00:00:00.000Z,
    endDate: 2022-09-15T00:00:00.000Z,
    ownerId: 5bca41cbe5a5c1808da49b1c,
    ownerType: 'vendor',
    createdAt: 2022-09-14T16:15:31.298Z,
    updatedAt: 2022-09-14T16:20:44.631Z,
    __v: 0
  }
]

I am getting the results like this. Here my concern is one owner has different insurances going to expire on different dates.

Now I have to pick only one document with recent endDate by using the ownerId.

How can I solve this issue ?

2

Answers


  1. const insurances = await Insurances.find({ownerId: 'Your Owner Id', endDate: {$gte: yesterdayDate, $lte: next30daysDate}}).sort({endDate: -1}).limit(1);
    

    The sort function will sort you arrays with new to old endDate, and limit will return only single document with latest endDate in an array.

    Login or Signup to reply.
  2. You want to take one value. Therefore, you can use findOne. With using sort(), we can achieve the data which has recent endDate.

      const insurances = await Insurances.findOne({$and: [{ownerId : mongoose.Types.ObjectId('OwnerId')}, {endDate: {$gte: yesterdayDate, $lte: next30daysDate}}]}).sort({endDate: -1})
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search