按日期查询 Orion Context Broker
Query Orion Context Broker by Dates
我尝试在 Orion 0.24 中按日期间隔查询但没有成功。
致电:
URL: http://<some-ip>:<some-port>/v2/entities?type=some-entity
给出:
[
{
"id": "some-id",
"type": "some-entity",
"coordenadas": {
"type": "geo:point",
"value": "43.7723705, -7.6784461"
},
"fecha": {
"type": "date",
"value": "2015-08-21T22:00:00.000Z"
},
},
{
"id": "some-id",
"type": "some-entity",
"coordenadas": {
"type": "geo:point",
"value": "43.6850207, 7.5716216"
},
"fecha": {
"type": "date",
"value": "2015-09-09T22:00:00.000Z"
}
}
]
然后我按日期区间查询的方式如下:
呼叫 1:
http://<some-ip>:<some-port>/v2/entities?type=some-entity&q=fecha==2015-08-01T22:00:00.000Z..2015-08-30T22:00:00.000Z
呼叫 2:
http://<some-ip>:<some-port>/v2/entities?type=some-entity&q=fecha==1441065601..1443657601
两个调用都以 200 代码和负载 [] 响应。我还尝试了其他运算符'>','<',结果相同。
编辑
我在 属性 'fecha' 上尝试了 '==' 并且效果很好:
呼叫 3:
http://<some-ip>:<some-port>/v2/entities?type=some-entity&q=fecha==2015-08-21T22:00:00.000Z
在documentation中说我们可以存储日期,所以我这样做了。我应该将它们存储为数字吗?
谢谢
首先,关于文档,我想在 http://telefonicaid.github.io/fiware-orion/api/v2/ 发表以下评论:
This is a work in progress and is changing on a daily basis
这意味着在 NGSIv2 完成之前,文档和 Orion 实现之间主要会发生一些不同步(文档使用比实现更高级)。
关于这个具体问题,范围、< 和 > 过滤器将在末尾使用带有日期的 Orion,但在 0.24.0 中尚不可用。在 0.24.0 中,这些过滤器仅适用于数字,因此,作为临时解决方法,您可以将日期存储为时间戳数字(例如 2015-01-01 等于 1420070400,以下页面可能会有所帮助:http://www.timestampgenerator.com)。
编辑:日期过滤器支持已在 Orion 0.28.0 中实现,因此从那时起您就可以进行如下查询:
GET /v2/entities?q=birthdate>2016-02-24T10:00:00.00Z
GET /v2/entities?q=birthdate==2016-02-23T10:00:00.00Z..2016-02-24T10:00:00.00Z
另请注意,您可以使用 dateCreated
和 dateModified
来表示实体创建和修改时间,例如:
GET /v2/entities?q=dateCreated>2016-02-24T10:00:00.00Z
GET /v2/entities?q=dateModified==2016-02-23T10:00:00.00Z..2016-02-24T10:00:00.00Z
我尝试在 Orion 0.24 中按日期间隔查询但没有成功。
致电:
URL: http://<some-ip>:<some-port>/v2/entities?type=some-entity
给出:
[
{
"id": "some-id",
"type": "some-entity",
"coordenadas": {
"type": "geo:point",
"value": "43.7723705, -7.6784461"
},
"fecha": {
"type": "date",
"value": "2015-08-21T22:00:00.000Z"
},
},
{
"id": "some-id",
"type": "some-entity",
"coordenadas": {
"type": "geo:point",
"value": "43.6850207, 7.5716216"
},
"fecha": {
"type": "date",
"value": "2015-09-09T22:00:00.000Z"
}
}
]
然后我按日期区间查询的方式如下:
呼叫 1:
http://<some-ip>:<some-port>/v2/entities?type=some-entity&q=fecha==2015-08-01T22:00:00.000Z..2015-08-30T22:00:00.000Z
呼叫 2:
http://<some-ip>:<some-port>/v2/entities?type=some-entity&q=fecha==1441065601..1443657601
两个调用都以 200 代码和负载 [] 响应。我还尝试了其他运算符'>','<',结果相同。
编辑
我在 属性 'fecha' 上尝试了 '==' 并且效果很好:
呼叫 3:
http://<some-ip>:<some-port>/v2/entities?type=some-entity&q=fecha==2015-08-21T22:00:00.000Z
在documentation中说我们可以存储日期,所以我这样做了。我应该将它们存储为数字吗?
谢谢
首先,关于文档,我想在 http://telefonicaid.github.io/fiware-orion/api/v2/ 发表以下评论:
This is a work in progress and is changing on a daily basis
这意味着在 NGSIv2 完成之前,文档和 Orion 实现之间主要会发生一些不同步(文档使用比实现更高级)。
关于这个具体问题,范围、< 和 > 过滤器将在末尾使用带有日期的 Orion,但在 0.24.0 中尚不可用。在 0.24.0 中,这些过滤器仅适用于数字,因此,作为临时解决方法,您可以将日期存储为时间戳数字(例如 2015-01-01 等于 1420070400,以下页面可能会有所帮助:http://www.timestampgenerator.com)。
编辑:日期过滤器支持已在 Orion 0.28.0 中实现,因此从那时起您就可以进行如下查询:
GET /v2/entities?q=birthdate>2016-02-24T10:00:00.00Z
GET /v2/entities?q=birthdate==2016-02-23T10:00:00.00Z..2016-02-24T10:00:00.00Z
另请注意,您可以使用 dateCreated
和 dateModified
来表示实体创建和修改时间,例如:
GET /v2/entities?q=dateCreated>2016-02-24T10:00:00.00Z
GET /v2/entities?q=dateModified==2016-02-23T10:00:00.00Z..2016-02-24T10:00:00.00Z