FIWARE Orion:实体类型修改可行性及属性类型变更相关咨询
Orion实体与属性类型修改及字段保留问题解答
1. 是否可以修改实体的类型?
不行,Orion的实体类型是不可变属性——一旦实体创建完成,就无法直接修改它的type字段。这是Orion的核心设计规则之一,目的是保证实体元数据的一致性。所以如果需要变更实体类型,唯一可行的方案就是创建一个新的实体,迁移原实体的数据过去。
2. 是否可以修改属性的类型?
可以,但需要注意数据兼容性问题:
- 如果属性当前没有值,直接修改类型不会有任何问题;
- 如果属性已有值,修改类型可能导致数据解析错误(比如把字符串类型改成数值类型,但原有值是非数字字符串)。这种情况下,建议先清空属性值,再修改类型,或者确保原有值可以兼容新的类型;
- 修改属性类型可以通过
PATCH请求实现,示例如下:
{ "attrs": { "temperature": { "type": "Integer" // 从原来的"Float"修改为"Integer" } } }
3. 创建新实体时如何保留原实体的dateCreated和dateModified字段?
默认情况下,Orion会自动生成dateCreated(实体创建时)和dateModified(实体更新时)字段,但如果需要复用原实体的这两个字段值,可以在创建新实体时显式指定它们:
- 在POST请求的实体数据中,直接包含
dateCreated和dateModified属性,设置为原实体的对应值; - 注意:
dateModified在后续更新实体时会被Orion自动覆盖为当前时间,如果需要保持原dateModified值,后续更新时要避免触发自动更新(或者显式重新设置该值,但不推荐,因为会破坏自动追踪更新时间的逻辑)。
示例创建请求:
{ "id": "new-sensor-001", "type": "UpdatedSensor", "dateCreated": { "type": "DateTime", "value": "2023-02-15T09:45:00Z" }, "dateModified": { "type": "DateTime", "value": "2023-05-20T14:20:00Z" }, "temperature": { "type": "Float", "value": 22.5 } }
这样创建的新实体就会保留原实体的创建和修改时间,同时拥有新的类型。
内容的提问来源于stack exchange,提问作者cdupont
相关产品推荐
相关产品推荐

