这个查询有效,fullPath
字段是一个列表
KeyLookup lookup
= ofy().load().type(KeyLookup.class).filter("fullPath IN", key.getFullPath()).first().get();
上面的查询还获取在
List中具有相同
String
元素的实体
我怎样才能只过滤那些列表中元素完全相同的实体,比如“不多不少”
更新:
例如
一个实体(说Object1)字段fullPath包含:
“一个”
另一个实体(比如Object2)字段fullPath包含:
“一个”
- “两个”
- “三个”
- “四个”
key.getFullPath包含:
“一个”
- “两个”
- “三个”
- “四个”
然后,上面的查询将返回
Object1
和Object2
,但是我需要的是,它只返回Object2
这是意料之中的,因为在比较一个查询中的两个列表时,实际发生的情况是,数据存储为过滤器列表中的每个值触发多个查询。因此,当您查询Object2
时,会对Object2
中的每个值执行四次查询。因为,Object1
是Object2
的“子集”,所以它也匹配查询。这就是您同时获得Object1
和Object2
的原因。
您可以修改查询以使用和
运算符来强制进行精确匹配。因此,您可以拥有以下功能:
Query<KeyLookup> q = ofy().load().type(KeyLookup.class);
for (String f : key.getFullPath()) {
q = q.filter("fullPath", f);
}
KeyLookup lookup = q.first().get();
希望这有帮助。
假设你想要一个精确的匹配(没有更多的值,没有更少的值),没有“原生数据存储”的方法来实现这一点。在获取or操作时,对filter()的多次调用将为您提供and操作,这两个操作都不完全匹配。然而,还是有办法的。
选项1:将列表加入到单个索引属性中
将列表中的所有项连接成一个值,并将其存储为合成索引属性。也许您需要根据顺序或大小写的重要性对其进行规范化。查询该属性,而不是列表属性。
只有当连接的值保证适合500个字符以下时,这才有效。似乎不太可能。相反,你可能想要。。。
选项2:对列表的哈希进行索引和查询
fullPathHash
。它不需要加密安全;MD5很好
问题内容: 我有两个列表,我要过滤两个列表都包含的thoose元素。我想用lambda表达式做到这一点。 用户getName和客户端getUserName都返回String。 这是我的示例代码: 问题答案: 但这效率很低,因为它是O(m * n)。您最好创建一组可接受的名称: 还要注意,它并不严格等同于您拥有的代码(如果已编译),如果有多个用户具有与该客户端相同的名称,则该客户端会将同一客户端两次
问题内容: 在Python中,我有一个元素列表和一个索引列表。我有什么办法可以立即检索其中的值作为索引的所有那些项? 例: 问题答案: 我不知道有什么方法可以做。但是您可以使用列表理解:
问题内容: 我开始使用django-tables2(从第一印象中就可以强烈推荐),我问自己如何实现列过滤。我找不到合适的文档,但是我确定它在那里。 问题答案: 答案有点晚了,但是无论如何…我也找不到任何合适的文档来进行列过滤。有很多方法可以做到这一点: 答:手动:我添加了一个包含要过滤的字段的表单,然后在我的视图中执行以下操作: 这很好用,但是不是那么干,因为它在视图中是硬编码的。 B.使用Sin
4.5. 过滤列表 如你所知,Python 具有通过列表解析(第 3.6 节 “映射 list”)将列表映射到其它列表的强大能力。这种能力同过滤机制结合使用,使列表中的有些元素被映射的同时跳过另外一些元素。 过滤列表语法: [mapping-expression for element in source-list if filter-expression] 这是你所知所爱的 列表解析 的扩展。
问题内容: 我的代码如下所示: 它返回一个列表,其中仅包含与匹配的条目。我想知道是否有一个内置的功能,类似于: 问题答案: 除了Konstantin的回答:Java 8 通过对该类添加了支持,该类在内部调用: 太棒了!
过滤字段的列表,每一个成员应该是数组或对象 $data = [ ['id'=>1, 'name'=>'a'], ['id'=>2, 'name'=>'b'], ]; // 两个毫无意义的实例化写法 $list = new FilterableList; $list = new FilterableList($data); // 只保留 name 字段 $list = new Fi