该问题可能会重复,但找不到适合此情况的正确答案。该集合是: coll1
{
"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 的 平均值 。
答案 0 :(得分:1)
我不清楚您要实现什么(更新数组的最后一项或更新日期为'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
答案 1 :(得分:-1)
此外,要找到第一个匹配项,请使用find_one