FIWARE Orion-LD upsert replace端点:仅替换属性还是全量替换(含类型)?
关于
ngsi-ld/v1/entityOperations/upsert?options=replace端点的准确定义及Orion-LD实现差异 规范层面的准确定义
根据2021年11月版NGSI-LD规范的5.6.8.3和5.6.8.4条款:
所有现有实体内容应被替换
若存在相同实体ID的现有实体,当请求更新模式为'replace'时,应被提供的新实体内容完全替换
这意味着使用replace选项的upsert操作,完全覆盖目标实体的所有内容,包括核心的实体类型(@type)。请求中提交的实体数据就是替换后的完整实体,原实体的所有属性、类型等元数据都会被彻底丢弃,最终仅保留请求里定义的内容。哪怕请求只包含id和新的@type字段,原实体也应该被替换成这个仅含ID与类型的极简实体。
Orion-LD 1.0.0的实现差异
你遇到的non-matching entity type报错,是Orion-LD 1.0.0版本的一个实现限制。该版本的upsert+replace逻辑额外添加了实体类型校验,要求请求中的类型必须与现有实体类型一致,这与规范要求的「完全替换」行为不符。
这个问题在Orion-LD 1.1.0及以上版本中已被修复,新版本会严格遵循NGSI-LD规范,允许通过replace选项直接变更实体类型,无需保留原有属性或满足类型匹配要求。
1.0.0版本临时解决方案
如果暂时无法升级版本,可通过以下方式绕过限制:
- 先执行
DELETE操作删除原有实体,再通过POST请求创建新类型的实体 - 在
upsert请求中保留原有实体的所有属性,同时修改@type字段(此方法不符合replace的设计初衷,仅作为临时替代方案)
内容的提问来源于stack exchange,提问作者Ires Mari
相关产品推荐
相关产品推荐

