Как обновить конкретный объект внутри массива?

#node.js #mongoose

#node.js #мангуст

Вопрос:

У меня есть данные, которые выглядят как показано ниже в MongoDB

 {
_id: aasdfeasfeasdf,
todo: [
         {_todoIde: 333, _with: []},
         {_todoIde: 111, _with: []},
      ]
}
 

Я хочу, чтобы $addToSet значение _todoIde: 333 _with {_todoIde: 333, _with: [aaaa]}, было таким. Как я могу это сделать?

 .updateOne(
   {_id},
   { $addToSet: {}}
)
 

Я добрался до документа, но я не могу указать, что _todoIde: 333 для обновления только этого.

Ответ №1:

Позиционный оператор $ идентифицирует элемент в массиве для обновления без явного указания позиции элемента в массиве,

 .updateOne(
  { _id: "aasdfeasfeasdf", "todo._todoIde": 333 },
  {
    $addToSet: {
      "todo.$._with": "aaaa"
    }
  }
)
 

Игровая площадка

Ответ №2:

Вы должны добавить дополнительное условие, чтобы указать todoIde

Попробуйте это:

 
db.collection.update(
            {$and:[{_id: typeId},{'todo._todoIde': 333}]},
            {$set: { "todo._todoIde.$._with":[a,b,c]}},
        );