Вопрос может быть повторен, но не найден правильный ответ, который обрабатывает это условие. Коллекция: колл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.

Я не совсем понял, чего вы пытаетесь достичь (обновить последний элемент массива или обновить элемент, где дата «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, если вы хотите обновить только первый соответствующий документ)