最近我一直致力于一个允许用户从ContextBroker,Cosmos等查询enities的应用程序。该应用程序的一个特征是初始化将由连接对象用于存储数据的实体。
创作很好,但我有一点问题。
正如Orion ContextBroker的文档中所述,当实体已经存在时,APPEND操作被解释为更新(我真的不明白为什么)。所以这是一个场景,用户有一个名为Room1的实体,传感器向他提供他的数据并存储它。有一天,他想创建一个新实体,但是出错并称之为Room1。来自Room1的所有当前数据将重置为我在我的应用程序中放置的默认值。
这是我的问题,有没有办法检查实体是否已经存在,而不是在创建之前在应用程序中进行手动查询(这需要花费更长的时间来处理)?
感谢您阅读我的问题并度过了愉快的一天。
Guillaume Jourdain。
答案 0 :(得分:1)
目前(Orion 0.22.0),唯一的方法是你提到的那个:检查实体是否已经存在进行查询。
以这种方式实现更新的原因在于,对于许多用例,期望的行为恰好是对话:如果实体以前不存在,客户端不希望得到错误,并且"追加或更新"语义工作正常。不幸的是,让一个快乐的用例让另一个感到难过:(
最佳解决方案是使此行为可配置。我们现在定义了Orion实现的FIWARE NGSI API的新版本,包括用于设置行为的URL选项,例如?options=append
设置"严格追加"语义(opossite to" append or update" semantics)。
编辑:Orion 0.24.0引入了APPEND_STRICT action,如果要添加的属性已经存在,则返回错误。