[英]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.