не удалось обновить массив объекта с несколькими условиями в мангусте

[{
  "date": "18/12/2010",
  "babies": [{
    "id":1,
    "name": "James",
    "age": 8,
  }, {
    "id":2,
    "name": "John",
    "age": 4,
  }]
}]

Я хочу установить возраст Иоанна 10, но не удалось. Я должен сделать несколько условий, чтобы быть более определенным.

Babies.update({"date":date, 'babies.id': 1}, {'$set': {age:10}, function(err, response){
        res.json(response);
  })

Первое условие-дата, а второе условие-массив объекта младенцев, который в данном случае является идентификатором. Выше запрос не имеет ошибки и никакого эффекта, где я сделал неправильно?

Я отлаживаю выполнение этого запроса

Babies.find({'babies.id': 1}, function(err, response){
        res.json(response);
  }) 

и он не мог найти правильную цель, возможно, в этом проблема

1 ответ

  1. Используйте {'$set': {'babies.$.age':10}}вместо {'$set': {age:10}}.

    Babies.update({"date":date, 'babies.id': 1},
       {'$set': {
          'babies.$.age':10
          }
      },
     function(err, response){
        res.json(response);
     })
    

    Оператор positional $ определяет элемент в массиве для обновления без явного указания положения элемента в массиве.

    Для получения дополнительной информации обратитесь к позиционному оператору MongoDB.