2010-11-30 36 views
0

如果在具有值數據存儲中的字符串列表:App Engine的,如何檢查列表中的所有值都在數據存儲中的字符串列表

A,B,C

如何將它與列表進行比較,以便只在列表中存在字符串列表中的每個值時才返回true?

[ '一', 'B']將返回false

[ 'A', 'B', 'C']將返回true

[ 'A', 'B',' c','d','e']將返回true

這是可能與單獨使用GQL還是我需要拉出字符串列表並循環它呢?

+0

您想比較特定實體中的列表,還是實際查詢包含該列表的實體?查詢永遠不會返回「真」或「假」,因此很明顯,你不能在GQL中做你想做的事情。 – geoffspear 2010-11-30 15:01:00

+0

@Wooble查詢包含列表的實體是我的意思。我意識到一個查詢不會返回真或假,這是我的錯誤措辭。 – jond 2010-12-01 12:17:40

回答

2

the documentation

查詢無法比較兩個列表值。沒有辦法測試兩個列表是否相等,而不分別測試每個元素的成員資格。

所以我猜想你的比較也是不可能的。

使用集合進行比較可能更有效,而不是遍歷列表。

1

您可以以排序的方式將您的列表序列化爲一個StringProperty。根據您的StringListProperty的內容,這可能與逗號分隔值一樣微不足道。

(可選)您可以使用類似於md5校驗和的東西來減少正在存儲和過濾的字符串的長度。

2

這不是直接可能的。您可以使用多個相等過濾器,並且查詢將只匹配至少具有列表中的項目的實體(例如,「如果foo是包含at的列表,則WHERE foo ='a'和foo ='b'」只會匹配至少'a'和'b')。如果您在沒有不等式過濾器或排序順序的情況下執行此操作,數據存儲區將使用內置的合併連接策略來滿足您的查詢。然而,非規範化將提供更強大的解決方案。例如,如果您將列表序列化爲單個字符串,則可以簡單地檢查該字符串是否相等。

相關問題