我注意到当我在Orion中注册具有一些'float'属性的实体时,在一些更新之后,类型将更改为'number'而不是'float'。
例如:
{ "id":"my_entity",
"type":"entity_type",
"attr1":{
"type":"float",
"value":"0.54",
"metadata":{}},
"attr2":{
"type":"Number",
"value":44.3,
"metadata":{}}}]
在这种情况下,当注册my_entity时,两种类型的属性都是“浮动”。当对attr2的值进行某些更新时,其类型已更改为“Number”。这是正确的行为吗?
答案 0 :(得分:1)
我认为这是由于默认输入,如NGSIv2 spec中的“部分表示”部分所述:
请求中可省略属性/元数据
type
。在属性/元数据创建或更新操作中省略时,将根据值使用默认类型:
- 如果value是字符串,则使用类型
Text
- 如果value是数字,则使用类型
Number
。- 如果value是布尔值,则使用类型
Boolean
。- 如果value是对象或数组,则使用
StructuredValue
。- 如果value为null,则使用
None
。
因此,您可能正在使用以下(类似的)API操作更新您的属性:
PUT /v2/entities/my_entity/attrs/attr2
{
"value": 44.3
}
该有效负载中的和type
遗漏触发了默认的输入功能。
基本上,有两种解决方案:
在属性更新操作中使用type
:
PUT /v2/entities/my_entity/attrs/attr2
{
"type": "float",
"value": 44.3
}
使用属性值更新操作(不接触类型或元数据):
PUT /v2/entities/my_entity/attrs/attr2/value
44.3