是否可以通过Wirecloud NGSI API的updateAttributes()函数更新子属性?
例如,这个实体中的坐标(entity.location.coords.coordinates [0] = - 2.000000)。
"attrNames": [ "A1", "A2", "position" ],
"creDate": 1389376081,
"modDate": 1389376244,
"location": {
"attrName": "position",
"coords": {
"type": "Point",
"coordinates": [ -3.691944, 40.418889 ]
}
EDITED
我自己的答案:可以通过传递一个对象作为属性的值。
ngsi.updateAttributes([
{
'entity': {'id': "entity-id"},
'attributes':[{
"name":"location","contextValue": {
"attrName": "position",
"coords": {
"type": "Point",
"coordinates": [ -2.000000, 40.418889 ]
}
}
}]
}
], {
onSuccess: onUpdateAttributesSuccess,
onFailure: onUpdateAttributesFail
}
);
然而, Wirecloud正在使用NGSI API v1 ,因此所有属性都被视为字符串,当它们被发送到Orion或从Orion接收时。
更多信息:http://fiware-orion.readthedocs.io/en/master/user/structured_attribute_valued/
答案 0 :(得分:0)
目前,使用WireCloud的NGSI API无法对结构属性进行部分更改。此外,据我所知,NGSI API没有提供直接的方法来部分更新结构化属性(v1和v2)。
然而,NGSI API的 v1支持结构化属性值。因此,您可以使用updateContext
方法仅更新一个属性(例如coordinates
属性)。唯一要考虑的是你必须提供完整的值,所以如果你想进行部分更改,你必须读取值,进行部分更改并更新它。
事实上,你几乎可以使用它。您只需要修改传递要更新的属性的方式,就应该将它们包装到数组中:
ngsi.updateAttributes([{
"entity": {"id": "entity-id"},
"attributes": [
{
"name": "location",
"contextValue": {
"attrName": "position",
"coords": {
"type": "Point",
"coordinates": [-2.000000, 40.418889]
}
}
}
]
}],
{
onSuccess: onUpdateAttributesSuccess,
onFailure: onUpdateAttributesFail
}
);