• Home
  • Jobs
  • Courses
  • Teachers
  • For business
  • Blog
  • ES/EN

0

43
Views
Update nested object in array MongoDB

I need to find and update documents with category that corresponding to the query. Array could contain mo than one corresponding id.

Query:

{
 "ids": ["61f1cda47018c60012b3dd01", "61f1cdb87018c60012b3dd07"],
 "userId": "61eab3e57018c60012b3db3f"
}

I got collection with documents like:

`{

   "_id":{"$oid":"61f1cdd07018c60012b3dd09"},
   "expenses":[
     {"category":"61eafc104b88e154caa58616","price":"1111.00"},                  
     {"category":"61f1cdb87018c60012b3dd07","price":"2222.00"}, 
     {"category":"61f1cda47018c60012b3dd01","price":"1241.00"}, 
     {"category":"61f1cdb87018c60012b3dd07","price":"111.00"}
   ],
   "userId":"61eab3e57018c60012b3db3f"
 }`

my method:

  async myMethod(ids: [string], userId: string) {
try {
  const { ok } = await this.ExpensesModel.updateMany(
    {"userId": userId, "expenses.category": { $in: ids }},
    {$set: {"expenses.$.category": "newCategoryID"}}
  );
  return ok
} ........

I path array of ids ["61f1cda47018c60012b3dd01","61f1cdb87018c60012b3dd07","61f1cdb87018c60012b3dd07"] and userId, this code update only 1 category by document.

So can i made it with mongo build in methods? or i need to find matching document and update it it by my self and after that update or insert;

13 days ago ·

Santiago Trujillo

1 answers
Answer question

0

Update with arrayFilters

db.collection.update({
  "expenses.category": {
    $in: [
      "61f1cda47018c60012b3dd01",
      "61f1cdb87018c60012b3dd07"
    ]
  }
},
{
  $set: {
    "expenses.$[elem].category": "61eab3e57018c60012b3db3f"
  }
},
{
  arrayFilters: [
    {
      "elem.category": {
        $in: [
          "61f1cda47018c60012b3dd01",
          "61f1cdb87018c60012b3dd07"
        ]
      }
    }
  ]
})

mongoplayground

13 days ago · Santiago Trujillo Report
Answer question
Find remote jobs
Loading

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post job Plans Our process Sales
Legal
Terms and conditions Privacy policy
© 2022 PeakU Inc. All Rights Reserved.