簡體   English   中英

使用App Engine數據存儲區查找重疊范圍

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

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