[英]Using the App Engine datastore to find overlapping ranges
我正在使用Google App Engine for Java和JDO接口來為CrimeWatch組織的應用程序提供數據存儲。 我試圖實現的功能之一是遠程日志,當人們長時間離開時會報告(因此巡邏者知道要密切關注房屋)。 在應用程序中,我有一個AwayLogEntry對象,其中包含開始和結束日期,以及所需的其他字段。
我需要向在特定時間段(通常是即將到來的一周)內離開的鄰居巡邏的人提供報告。 我正在嘗試構建一個報告,給出兩個日期,找到與此范圍重疊的所有AwayLogEntries。
我真正想要使用的查詢是
select * from AwayLogEntry where not(end < :reportStartDate || start > :reportEndDate)
但是不允許使用NOT子句(找不到關於這個的文檔,但是它引起了這個效果的異常),也沒有使用帶有不等式過濾器的兩個字段,所以我不能直接查詢不同的重疊情況。
我現在的解決方法並不是很好 - 當我的當前日期大於條目結束日期時,我將創建一個日常的cron作業,刪除(或標記它們,如果我需要保留它們以進行審計)。 然后我可以查詢開始日期小於報告結束日期的所有條目(如果我不刪除它們,則不會標記)。 這將允許合理地報告下一個X天的條目(這是他們通常需要的),但不允許任意日期范圍查詢(我猜他們會要求),除非我只是拉入所有條目並在代碼中過濾它們。
任何人都可以想到解決GAE JDO實施的這種限制的任何技巧嗎?
除了AwayLogEntry
的開始和結束AwayLogEntry
,您還可以擁有一個列表屬性,其中包含此人離開的所有日期的列表。
然后,您的查詢過濾器可以檢查dates > :reportStartDate and dates < :reportEndDate
,它在一個date屬性列表中組合了兩個不等式過濾器,這是受支持的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.