根据 Orion 上下文代理 NGSIv2 的官方文档:
您可以在条件中包含筛选表达式。例如,到 不仅在压力发生变化时收到通知,而且在压力发生变化时收到通知 范围 700-800。这是一个高级主题,请参阅"订阅" 部分。
在NGSIv2订阅中,没有像NGSIv1这样的notifyConditions
,它被替换为subject.condition object:
condition
:触发通知的条件。此字段是可选的 它可能包含两个属性,都是可选的:
attrs
:属性名称数组
expression
:由q
、mq
、georel
组成的表达式,geometry
和coords
(请参阅上面的"列出实体"操作( 字段(
当我们使用subject.condition.attrs
,它包含一个属性名称数组,这些名称定义了"触发属性",即在创建/更改时由于实体创建或更新而触发通知的属性。
但是,对于subject.condition.expression
官方文档中没有示例。
得到拼图碎片可以推断出:
- 可以结合
subject.condition.expression
和subject.condition.attrs
。如果我设置和属性不同的表达式,例如。带有"boo>10"表情的attr foo会做什么?这会表现得像OR
还是AND
? - 可以设置多个表达式。 这会表现得像
OR
还是AND
?
最好有一些这些更复杂的订阅示例,这些示例结合了在订阅中分隔实体的不同方法。
注意:此问题与 Orion 版本 1.7.0+ 有关
我认为以下示例来自 NGSIv2 概述,适用于已经了解 NGSIv1 的开发人员演示文稿(当前版本中的幻灯片 34(,可以帮助澄清。
示例:订阅以车辆结尾的任何类型的任何实体(例如道路车辆、飞行车辆等(中的速度变化 当速度大于 90 时,其平均元数据介于 80 和 90 之间,并且车辆到马德里市中心的距离小于 100 公里
请求:
POST /v2/subscriptions
...
{
"subject": {
"entities": [
{
"idPattern": ".*",
"typePattern": ".*Vehicle"
},
],
"condition": {
"attrs": [ "speed" ],
"expression": {
"q": "speed>90",
"mq": "speed.average==80..100",
"georel": "near;maxDistance:100000",
"geometry": "point",
"coords": "40.418889,-3.691944"
}
}
},
...
}
如本例所示,您可以使用不同的条件(q
、mq
、地理查询等(,它们在 AND 意义上进行解释。此外,q
和mq
允许在 AND 意义上解释复杂的表达式,例如:
"q": "speed>90;engine!=fail",
请注意,q
和mq
出现在订阅中时expression
遵循与它们出现在同步查询中的规则相同的规则(即GET /v2/entities?q=...
(。这些规则在 NGSIv2 规范中的"简单查询语言"部分中进行了描述。