在mongo中,是否可以同时使用$ setOnInsert和$ max更新?

时间:2019-06-06 22:26:43

标签: node.js mongodb

我正在尝试编写一个更新,如果它不存在,它将把一个对象设置为键的值。如果确实存在,那么我只想在新值大于现有值时更新特定字段。

以下是我尝试执行的操作的示例:

    ...
    updateOne: {
        filter: {
            _id: name,
        },
        update: {
            $setOnInsert: {
                _id: name,
                value: { ace: true, bay: uniqueID },
            },
            $max: {
                'value.bay': uniqueID,
            },
        },
        upsert: true,
    },
    ...

nameuniqueID都是发送给该函数的参数。

如果_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更新的字段影响的对象中设置另一个值

0 个答案:

没有答案