Arangodb AQL:具有嵌套数组日期的动态查询
我一直在尝试让这个动态查询处理日期,如Arangodb3.1所示 当我不尝试查询日期时,这非常有效,但当我尝试查询以下日期时,会返回一个空列表Arangodb AQL:具有嵌套数组日期的动态查询,arangodb,aql,arangojs,Arangodb,Aql,Arangojs,我一直在尝试让这个动态查询处理日期,如Arangodb3.1所示 当我不尝试查询日期时,这非常有效,但当我尝试查询以下日期时,会返回一个空列表 { query: 'For c IN @@collectionName FILTER ( c.@p0 == @v0 AND c.@p1 >= @v1 AND c.@p2 <= @v2 ) LIMIT @count RETURN c ', bindVa
{
query:
'For c IN @@collectionName
FILTER ( c.@p0 == @v0 AND c.@p1 >= @v1 AND c.@p2 <= @v2 )
LIMIT @count RETURN c ',
bindVars: {
'@collectionName': 'Event',
p0: 'isPublished',
v0: true,
p1: 'dates[*].startsAt',
v1: '2018-06-01T04:00:00.000Z',
p2: 'dates[*].startsAt',
v2: '2018-07-01T03:59:59.999Z',
count: 9
}
}
{
查询:
'对于@@collectionName中的c
过滤器(c.@p0==@v0和c.@p1>=@v1和c.@p2您的查询中存在错误,但它们实际上与日期无关:
dates[*].startsAt
不是有效的属性路径,而是日期返回日期.startsAt
中日期的的简写表达式,返回数组
比较运算符=
不能像您所想的那样在数组上工作。null
、true
、false
以及每个数字和字符串都比任何数组小,请参见。您的时间戳数组将始终大于任何给定的时间戳字符串。您可能需要的是一个likeALL>=
表达式dates[*].startsAt
不能用作绑定参数。对于没有数组的文档结构,如{“date”:{“startsAt”:“…”}
绑定[“date”,“startsAt”]
如p1
或p2
所示。请注意绑定参数值是一个字符串数组。另一方面,“date.startsAt”
将描述顶级属性的路径
{“date.startsAt”:…}
而不是顶级属性date的嵌套属性startsAt,如{“date”:{“startsAt”:…}
您对日期[*]所做的操作。startsAt
描述了一个顶级属性,如{“dates[*].startsAt”:…}
,它不存在。[“dates[*]”,“startsAt”]
也不起作用。如果要使用数组扩展表达式,则必须在查询中像c.@p1a[*].@p1b
那样编写它,并使用绑定参数{“p1a”:“dates”,“p2a”:“startsAt”}
查询:
FOR c IN @@collectionName
FILTER c.@p0 == @v0
FILTER c.@p1a[*].@p1b ALL >= @v1
FILTER c.@p2a[*].@p2b ALL < @v2
LIMIT @count
RETURN c
您的查询中存在错误,但它们实际上与日期无关:
不是有效的属性路径,而是日期返回日期.startsAt中日期的dates[*].startsAt
的简写表达式,返回数组
- 比较运算符
不能像您所想的那样在数组上工作。=
、null
、true
以及每个数字和字符串都比任何数组小,请参见。您的时间戳数组将始终大于任何给定的时间戳字符串。您可能需要的是一个likefalse
ALL>=
- 表达式
不能用作绑定参数。对于没有数组的文档结构,如dates[*].startsAt
绑定{“date”:{“startsAt”:“…”}
如[“date”,“startsAt”]
或p1
所示。请注意绑定参数值是一个字符串数组。p2
将描述顶级属性的路径另一方面,“date.startsAt”
而不是顶级属性date的嵌套属性startsAt,如{“date.startsAt”:…}
{“date”:{“startsAt”:…}
您对日期[*]所做的操作。startsAt描述了一个顶级属性,如
,它不存在。{“dates[*].startsAt”:…}
也不起作用。如果要使用数组扩展表达式,则必须在查询中像[“dates[*]”,“startsAt”]
那样编写它,并使用绑定参数c.@p1a[*].@p1b
{“p1a”:“dates”,“p2a”:“startsAt”}
FOR c IN @@collectionName
FILTER c.@p0 == @v0
FILTER c.@p1a[*].@p1b ALL >= @v1
FILTER c.@p2a[*].@p2b ALL < @v2
LIMIT @count
RETURN c
是否有理由以这种格式存储日期?这样的日期只是字符串,并且您使用的是字符串比较器,因为日期不是数据类型。如果您将所有日期转换为UTC 0的Unix历元时间(毫秒精度)然后处理整数,日期比较就变得容易多了。您需要构建函数来确定给定日期的Unix历元时间整数,但一旦完成,就更简单了。是否有理由以这种格式存储日期?这样的日期只是字符串,而您使用的是字符串比较器,因为日期不是数据类型如果您将所有日期转换为UTC 0的Unix历元时间(毫秒精度),那么您将处理整数,并且日期比较变得更容易。您需要构建函数来确定给定日期的Unix历元时间整数,但一旦完成,就更简单了。