簡體   English   中英

如何在 ArangoDB 中查找數組中具有特定日期(范圍)的文檔?

[英]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 個事件,每個事件都有startend

現在我想查找在某個日期范圍內有事件的所有文檔,例如。 1970-04-101970-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 但是一旦startend都在查詢中,我能夠提出的所有查詢要么產生零結果,要么產生與輸入日期范圍不匹配的誤報。

查找兩個屬性時,此處是否錯誤地使用了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM