App Engine,如何检查列表中的所有值是否在数据存储中的字符串列表中
假设你在数据库里有一个字符串列表,里面的值是:
a,b,c
你想要比较这个列表和另一个列表,只有当字符串列表里的每一个值都在这个列表里时,才返回“真”。
比如说,列表 ['a', 'b'] 会返回“假”,因为缺少了 'c'。
而列表 ['a', 'b', 'c'] 会返回“真”,因为所有的值都有。
再比如,列表 ['a', 'b', 'c', 'd', 'e'] 也会返回“真”,因为虽然多了 'd' 和 'e',但 'a'、'b' 和 'c' 都在里面。
那么,使用 GQL(谷歌查询语言)能做到这一点吗?还是说我需要把字符串列表提取出来,然后一个一个地检查?
3 个回答
1
你可以把你的列表按照排序的方式,作为一个单独的字符串来保存。根据你的字符串列表的内容,这可能就像用逗号分隔的值那么简单。
你也可以选择使用像md5这样的校验和,来减少存储的字符串长度,这样在过滤时也会更方便。
2
这件事直接做是不行的。你可以使用多个相等的过滤条件,这样查询结果只会匹配那些至少包含你列表中这些项目的实体(比如说,“WHERE foo = 'a' AND foo = 'b'”,只有当foo的列表里至少有'a'和'b'时才会匹配)。如果你这样做而没有使用不等式过滤或排序,数据存储系统会用内置的合并连接策略来满足你的查询。
不过,使用反规范化的方法会提供更强大的解决方案。例如,如果你把你的列表序列化成一个单独的字符串,你就可以简单地用这个字符串进行相等性检查。
2