我正在尝试查找集合中具有特定日期范围内事件的所有文档。
简化后的文档结构看起来像这样:
{
"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
运算符的用法是否不正确,或者我做错了什么?
- 谢谢-谢谢
1条答案
按热度按时间a1o7rhls1#
当前查询将返回包含符合任一条件的
date_events
的所有文档。为了确保两个条件都与一个
date_event
匹配,可以在子查询中筛选date_events
,然后筛选非空结果,如下所示(未测试,但应该可以帮助您开始):