何时使用Datomic Upsert?

问题描述

我指的是:db/unique :db.unique/identity (与:db.unique/value相对)

天真地对我进行更新听起来有点吓人,因为如果我尝试插入与现有记录具有相同值(对于声明为唯一的字段)的新记录,我的感觉是我 想要 失败。

如果某个字段被声明为唯一字段,我将要做的是,在创建或更新另一条记录时,检查该值是否被接受,以及是否向用户提供该值的反馈。

关于upsert我缺少什么?何时/为什么有用?

搜索显示以下内容(与原子学无关)

“ upsert有助于避免重复记录的创建,并且可以节省您的时间(如果插入组),因为您不必确定首先存在哪些记录”。

我不明白的是,有时datic doc文档建议使用此功能,但我不明白为什么它在任何方面都更好。以允许碰撞为代价节省时间?

例如,如果我有一个用户注册系统,我绝对不希望在用户提交的电子邮件中“增补”。我想不出有什么用处的情况-除​​了上面引用的内容以外,如果您有大量的东西并且“没有时间”检查它们是否首先存在。

解决方法

原子属性:db/unique可以与:db.unique/identity:db.unique/value一起使用

如果它与:db.unique/identity一起使用,将向上插入

如果与:db.unique/value一起使用,将会发生冲突。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...