Orion Context Broker - 在实体中推送数组元素

Orion Context Broker - Push array element in entities

我制作了实体

{ "contextElements": [ { "type": "T1", "isPattern": "false", "id": "E1", "attributes": [ { "name": "A", "type": "T", "value": [ "22" , { "x": [ "x1", "x2"], "y": "3" }, [ "z1", "z2" ] ] }, { "name": "B", "type": "T", "value": { "x": { "x1": "a", "x2": "b" }, "y": [ "y1", "y2" ] } } ] } ], "updateAction": "APPEND" }

现在我想在一个数组、一个字符串 ("NEW VALUE") 和一个 json 对象 ({"NEW":"OBJECT"})

{ "contextElements": [ { "type": "T1", "isPattern": "false", "id": "E1", "attributes": [ { "name": "A", "type": "T", "value": [ "22" , { "x": [ "x1", "x2"], "y": "3" }, [ "z1", "z2" ] , "NEW VALUE", {"NEW":"OBJECT"} ] } ] } ], "updateAction": "UPDATE" }

是否可以像在 array.push() 中那样添加新值?

保存以前的值,之后只添加新值。

目前(Orion 0.18.1),向值为向量的属性添加元素的唯一方法是使用包含新元素的新向量更新此类属性。

但是,我认为将值是向量的属性推送到不需要更新整个向量的元素是一个需要考虑的有趣功能,因此我们创建了 an issue about it 并且最终可能会实现.

编辑: 此功能最终在 Orion 3.3.0 中使用 $push 更新运算符实现。例如,将项目 3 添加到实体 E 中的数组属性 A:

PUT /v2/entities/E/attrs/A
{
  "value": { "$push": 3 },
  "type": "Number"
}

可在 Orion documentation 中找到完整信息。

EDIT2: 从 Orion 3.5.0 开始,您可以使用 $each 修饰符在同一操作中添加多个项目。例如,将项目 3、4 和 5 添加到实体 E 中的数组属性 A:

POST /v2/entities/E/attrs/A
{
  "value": { "$push": {"$each": [3, 4, 5]} },
  "type": "Number"
}

(Orion 3.5.0 目前还没有发布,虽然修复已经合并到 master 分支,可以在 telefonicaiot/fiware-orion:latest dockerhub 镜像中获取)