使用Python-EVE使用upsert查找find_and_modify

ale*_*_ch 3 python rest pymongo eve

需要更新或插入时有一个常见的用例.例如:

 obj = db['data'].find_and_modify(
        {
            'Name': data['Name'],
            'SourcePage': data['SourcePage'],
        },
        data,
        upsert=True
    )
Run Code Online (Sandbox Code Playgroud)

当然可以将此请求拆分为GET然后PATCH或者INSERT 可能还有更好的方法吗?

PS eve提供了一些很好的功能,如文档版本和元数据(_created,_updated等)

Man*_*aze 5

upsert支持现在是即将发布的版本的一部分.

一个人不必做任何不同的事情.默认情况下,该功能处于"开启"状态.因此,如果用户尝试PUT不存在的项目,则将创建新项目.id有效负载中发送的字段将被忽略.

如果用户不想要此功能,则用户需要明确设置UPSERT_ON_PUTFalse.现在,用户恢复了"旧"行为.即,当用户尝试PUT不存在的项时,404返回.