我正在尝试编写一个更新,如果它不存在,它将把一个对象设置为键的值。如果确实存在,那么我只想在新值大于现有值时更新特定字段。
以下是我尝试执行的操作的示例:
...
updateOne: {
filter: {
_id: name,
},
update: {
$setOnInsert: {
_id: name,
value: { ace: true, bay: uniqueID },
},
$max: {
'value.bay': uniqueID,
},
},
upsert: true,
},
...
name
和uniqueID
都是发送给该函数的参数。
如果_id: name
还不存在,我想添加我的$setOnInsert
指定的对象。
如果存在_id: name
,则仅当新值更大时,我才想用新的value.bay
更新uniqueID
字段。由我的$max
指定。
如果_id: name
存在并且新的uniqueID
不大于先前的uniqueID
,那么我不希望发生任何更改。
我想知道在单个查询中是否可以进行这种类型的操作。任何帮助表示赞赏!
还要补充一点,我当前面临的问题是如果_id: name
不存在,那么上面的查询会出现以下错误:
Cannot update 'value' and 'value.bay' at the same time
该错误使我认为不可能在单个查询中执行此操作:/
编辑:
我还为$setOnInsert
尝试了以下方法:
$setOnInsert: {
_id: name,
value: { ace: true },
}
以为也许我可以在不受$max
更新的字段影响的对象中设置另一个值