skip to Main Content

I have Locations collection in MongoDB that includes two documents.
Each one of them has its own array of confirmed bookings as objects with Ids.
How can I update the object that has _id: c1?
Is it possible to do that in a single query?


[{
_id :63233022222222,
title :"Ravenholm",
price: 180,
capacity: 2,
confirmedBookings: [
 {
  _id : r1,
  start: 1663207200000,
  finish: 1663210799999
 },
 {
  _id: r2,
  start: 1663322400000,
  finish: 1663329599999
 }
]
},
{
_id :6323301111111111,
title :"City 17",
price: 360,
capacity: 4,
confirmedBookings: [
 {
  _id : c1,
  start: 1663207200000,
  finish: 1663210799999
 },
 {
  _id: c2,
  start: 1663322400000,
  finish: 1663329599999
 }
]
}]

2

Answers


  1. You can use elemMatch to find the element inside array, then update it’s value.

    return await documentName.findOneAndUpdate({ confirmedBookings: { $elemMatch: { _id: "c1"} } }, {"confirmedBookings.$._id" : newValue})
    

    Write your schema’s name to documentName.

    Also, write your value to search as $elemMatch: {_id: "c1"} . The newValue is the new value you want to update.

    I hope, this helps you. Good luck.

    Login or Signup to reply.
  2. You should be able to query and update the specific object with:

    const updated = await Model.findOneAndUpdate(
      { 'confirmedBookings._id': c1 },
      {
        'confirmedBookings.$.start': 'new-start',
        'confirmedBookings.$.finish': 'new-finish',
      },
      { new: true }
    );
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search