【问题标题】:Querying dates in ArangoDB 3.1在 ArangoDB 3.1 中查询日期
【发布时间】:2016-11-04 10:40:27
【问题描述】:

据我了解,ArangoDB 3.1 现在支持将日期类型作为其新的内部存储格式 VelocyPack 的一部分。 我应该如何在 AQL 查询中使用日期类型的字段(例如 FILTER)?看起来日期类型字段的文档尚未更新: https://docs.arangodb.com/devel/AQL/Functions/Date.html

谁能提供一个 AQL 查询示例?类似的东西

FOR p IN person FILTER p.birthday == '2016-11-04' RETURN p

字段 p.birthday 的日期类型在哪里?

【问题讨论】:

    标签: arangodb


    【解决方案1】:

    因为 VelocyPack 主要用作 ArangoDB 的内部存储格式,所以 AQL、shell 或 web-ui 目前不支持其他 VelocyPack 类型。他们都必须使用json进行处理。

    目前创建具有日期类型的文档的唯一方法是通过 Java-Driver(版本 4.1.0)。驱动程序也是作为 AQL 查询结果获取 VelocyPack 的唯一可能性。其他所有实现都会自然地返回 json,而无需额外的 VelocyPack 类型。

    除此之外,AQL 日期函数在当前开发状态​​下不支持 VelocyPack 日期类型。

    【讨论】:

      【解决方案2】:

      ArangoDB 从 ArangoDB 3.0 版开始使用 VelocyPack 作为内部存储格式。 VelocyPack 具有 Date 日期类型以及 JSON 中不存在的其他一些数据类型。

      但是即使在 ArangoDB 中使用 VelocyPack 作为内部存储格式,ArangoDB 的所有外部 API 仍然是基于 JSON 的,这意味着它们只支持 JSON 原生支持的数据类型(null、boolean、number、string、array、object )。

      支持更多(非 JSON)数据类型已在路线图中,但在 ArangoDB 3.1 中还没有。支持更多数据类型需要为这些数据类型编写一些内部包装函数,并让所有 AQL 运算符正确地使用它们。

      所以在 3.1 版中,保存日期值的选项仍然是使用日期时间字符串(例如,采用 ISO8601 格式,例如2016-11-10T14:08:20.236Z使用数字值来存储时间戳。

      【讨论】:

      • 感谢您的澄清。然而,正如 mpv1989 提到的,java 驱动程序版本 4.1.x 已经使用 VelocyPack 而不是 JSON,因此可以使用这个 java 驱动程序存储日期类型。
      • 在服务器和 AQL 中添加对非 JSON 数据类型的适当支持已在我们的待办事项列表中,但短期内不会出现。但我们也认为拥有它很重要。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多