orientdb仅当为空时更新字段

orientdb仅当为空时更新字段,orientdb,Orientdb,我正在试图找到一种方法来使用orientdb运行更新查询,在其中我更新了多个属性。在一条边上有两个属性,一个称为已确认的,另一个称为读取的。“已确认”字段可以在“读取”字段更新之前进行更新。但是,我想确保在更新所有read_at字段时,我还确保所有已确认的_at字段也使用当前时间戳进行更新(如果之前未设置) 我的使用案例是有类似facebook的通知。用户可以确认通知,但此时无法读取。但是,如果他们单击read_all按钮,或者决定稍后仅“读取”该通知,那么我希望确保我也在更新已确认的_at属性

我正在试图找到一种方法来使用orientdb运行更新查询,在其中我更新了多个属性。在一条边上有两个属性,一个称为已确认的,另一个称为读取的。“已确认”字段可以在“读取”字段更新之前进行更新。但是,我想确保在更新所有read_at字段时,我还确保所有已确认的_at字段也使用当前时间戳进行更新(如果之前未设置)

我的使用案例是有类似facebook的通知。用户可以确认通知,但此时无法读取。但是,如果他们单击read_all按钮,或者决定稍后仅“读取”该通知,那么我希望确保我也在更新已确认的_at属性(如果该属性为null)

有没有办法对已确认的_at字段执行case语句类型更新,以仅在null时更新

更新:为了更清楚,我总是想更新read_at字段,但只想在字段为空时更新已确认的_at字段。如果之前已确认,我希望该值保持不变

UPDATE EDGE received SET read_at = '#{DateTime.now}', acknowledged_at = '#{DateTime.now}' WHERE out.employeeId = '#{employeeId}'
试试这个(或变体)

更新接收到的边缘集。。。其中,已确认的_at为空

UDPATE

这对我有用

update edge received set read_at = "2017-06-23 19:29:00",acknowledged_at=ifnull(acknowledged_at, "2017-06-23 19:29:00") WHERE out.employeeId = 'A002'

参考

我尝试了以下方法,但失败了<代码>更新边缘接收集读取时间='2017-06-21 16:20:00',确认时间=如果(确认时间>0,确认时间'2017-06-21 16:20:00'),其中键='24'尝试:
IF(acknowledged_at为NULL
。如果失败,您必须将查询拆分为每列一个。或者,您可以通过SQL批量发送信息:在上面的方案中,我始终希望更新read_at字段,但只有在值为NULL时才更新acknowledged_at。在我的方案中,可能已确认通知,但无法读取通知。因此“确认的更新日期取决于读取时的值是否为空,而读取时的值始终在更新。@DavidBodenschatz Hi。我已更新了答案。现在应该可以了,谢谢,这解决了问题。感谢您的帮助。”。
update edge received set read_at = "2017-06-23 19:29:00",acknowledged_at=ifnull(acknowledged_at, "2017-06-23 19:29:00") WHERE out.employeeId = 'A002'