Обновите последний элемент массива в MongDB

Вопрос может быть повторен, но не найден правильный ответ, который обрабатывает это условие. Коллекция: колл1

{
  "temperature_status": "Normal",
  "monthly_record": [
    {
      "date": "2019-02-14",
      "average": "75F",
      "daily_record": [
        {
          "avg": "60F",
          "period": "First Half"
        },
        {
          "avg": "90F",
          "period": "Second Half"
        }
      ]
    },
    {
      "date": "2019-02-15",
      "average": "60",
      "daily_record": [
        {
          "avg": "50F",
          "period": "First Half"
        },
        {
          "avg": "70F",
          "period": "Second Half"
        }
      ]
    }
    ]
  }

Я хочу обновить средний из 2019-02-15.

Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
0
156
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я не совсем понял, чего вы пытаетесь достичь (обновить последний элемент массива или обновить элемент, где дата «2019-02-15»).

Если вы хотите обновить последний элемент массива в ваших документах

На основе вашего образца (поскольку вы использовали курсор, я адаптировал его для обновления всей базы данных, используйте осторожно. Если вы хотите обновить только 1 документ, вам не следует использовать .find({})

const cursor = coll1.find({}).limit(1);

while (cursor.hasNext()) {
  const item = cursor.next();
  const update_index = doc['monthly_record'].length - 1;
  coll1.update_one({ _id: item._id },
    { '$set': { `monthly_record.${update_index}.average` :'60F' } }
  )
}

Если вы хотите обновить элемент массива по определенному индексу

Вы сказали I want to update average of 2019-02-15, это означает, что вы уже знаете фильтр, поэтому вы можете сделать это в одном запросе:

coll1.update({ 'monthly_record.date': '2019-02-15' },
  { '$set': { 'monthly_record.$.average' :'60F' } },
  { multi: true }
)

(Удалите multi: true, если вы хотите обновить только первый соответствующий документ)

Кроме того, чтобы найти первое совпадение, используйте find_one

Другие вопросы по теме