[英]How to find documents in ArangoDB which have a certain date (range) in an array?
我正在尝试查找集合中具有特定日期范围内事件的所有文档。
简化后的文档结构如下所示:
{
"name": "Example document",
"other": "property",
"date_events": [
{
"start": "1963-10-12T00:00:00.000Z",
"end": "1963-10-13T12:00:00.000Z"
},
{
"start": "1970-04-20T00:00:00.000Z",
"end": "1970-04-20T12:00:00.000Z"
}
]
}
有n 个文档,它们都有属性date_events
,它是一个对象数组,包含n 个事件,每个事件都有start
和end
。
现在我想查找在某个日期范围内有事件的所有文档,例如。 1970-04-10
和1970-04-28
之间:
FOR doc IN api_documents
FILTER (doc.date_events[*].start ANY >= "1970-04-10T00:00:00.000Z" &&
doc.date_events[*].end ANY <= "1970-04-28T12:00:00.000Z")
RETURN { _key: doc._key, _id: doc._id, events: doc.date_events[*] }
问题是,上面的查询不正确,结果还包含没有匹配事件的文档,例如。 这个:
{
"name": "False positive",
"other": "property",
"date_events": [
{
"start": "1966-02-24T00:00:00.000Z",
"end": "1966-02-24T12:00:00.000Z"
},
{
"start": "1979-11-26T00:00:00.000Z",
"end": "1979-11-30T12:00:00.000Z"
},
{
"start": "1980-01-31T00:00:00.000Z",
"end": "1980-01-31T12:00:00.000Z"
}
]
}
当只过滤一个属性时,我可以让它工作,例如。 start
。 但是一旦start
和end
都在查询中,我能够提出的所有查询要么产生零结果,要么产生与输入日期范围不匹配的误报。
查找两个属性时,此处是否错误地使用了ANY
运算符,或者我做错了什么?
谢谢你。
您当前的查询返回包含符合任一标准的date_events
的每个文档。
为确保两个条件都与单个date_event
匹配,您可以在子查询中过滤date_events
,然后过滤非空结果,如下所示(未经测试,但应该让您入门):
FOR doc IN api_documents
LET matches = (
FOR de IN doc.date_events
FILTER de.start >= "1970-04-10T00:00:00.000Z" &&
de.end <= "1970-04-28T12:00:00.000Z"
RETURN 1
)
FILTER LENGTH(matches) > 0
RETURN { _key: doc._key, _id: doc._id, events: doc.date_events }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.