根据official documentation of Orion Context Broker NGSIv2:
您可以在条件中包含过滤表达式。例如,到 不仅会在压力变化时获得通知,而且如果压力发生变化 范围700-800。这是一个高级主题,请参阅“订阅” NGSIv2 specification中的部分。
在NGSIv2订阅中没有+
,例如NGSIv1,它被subject.condition对象取代:
notifyConditions
:触发通知的条件。该字段是可选的 它可能包含两个属性,都是可选的:
condition
:属性名称数组
attrs
:由expression
,q
,mq
组成的表达式,georel
和geometry
(请参阅上面的“列出实体”操作 场)
当我们使用coords
时,它包含一系列属性名称,这些名称定义了“触发属性”,即由于实体创建或更新而创建/更改时触发通知的属性。
但是,对于subject.condition.attrs
,官方文件中没有例子。
可以推断拼图:
subject.condition.expression
和subject.condition.expression
。如果我设置和表达不同的表达式,例如。 attr foo表达'boo> 10'它会做什么?这会表现得像subject.condition.attrs
或OR
吗?AND
或OR
吗?将这些更复杂的订阅的一些示例与订阅中的实体分隔的不同方式结合起来会很不错。
注意:此问题与Orion版本1.7.0 +
有关答案 0 :(得分:2)
我认为以下示例来自NGSIv2 Overview for Developers That Already Know NGSIv1演示文稿(当前版本中的幻灯片34),有助于澄清。
示例:每当速度 speed 更改>大于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
,geoquery等),并且它们在AND意义上进行解释。 Morevoer,q
和mq
允许在AND意义上解释的复杂表达式,例如:
"q": "speed>90;engine!=fail",
请注意q
和mq
出现在订阅expression
时遵循的规则与同步查询中显示的规则相同(即GET /v2/entities?q=...
)。这些规则在NGSIv2 specification。