Google app engine 在ndb中,如何查询属性A不在列表B中的项目?
在ndb中,为了查询属性Google app engine 在ndb中,如何查询属性A不在列表B中的项目?,google-app-engine,app-engine-ndb,Google App Engine,App Engine Ndb,在ndb中,为了查询属性A位于列表B中的项目,您可以执行以下操作: Item.query(Item.A.IN(B)) 如何查询属性A不在列表B中的项目?这是不可能的。请注意,对于列表B中的每个项,IN查询实际上会自动分解为许多不同的EQUALS查询,并返回合并结果 您可以查询全部,然后手动筛选并忽略列表B中的结果 一个典型的GAE解决方案是对另一个易于索引和查询的值进行反规范化和预计算,并将其保存为项中的属性。永不说永不 通过构造一系列的x=y和x=z'ndb过滤器,我们可以模拟“不在”查询:
A
位于列表B
中的项目,您可以执行以下操作:
Item.query(Item.A.IN(B))
如何查询属性A不在列表B中的项目?这是不可能的。请注意,对于列表B中的每个项,IN查询实际上会自动分解为许多不同的EQUALS查询,并返回合并结果 您可以查询全部,然后手动筛选并忽略列表B中的结果 一个典型的GAE解决方案是对另一个易于索引和查询的值进行反规范化和预计算,并将其保存为项中的属性。永不说永不 通过构造一系列的x=y和x=z'ndb过滤器,我们可以模拟“不在”查询:例如(1): 实际上,这类似于以下手动构造的查询(2): 请注意,只需执行以下操作即可(3): 结果查询:
Query(kind='UserSetting', filters=OR(AND(FilterNode('name', '<', 'cookieAck'), FilterNode('name', '<', 'newkey'), FilterNode('name', '<', 'tempCelsius')), AND(FilterNode('name', '<', 'cookieAck'), FilterNode('name', '<', 'newkey'), FilterNode('name', '>', 'tempCelsius')), AND(FilterNode('name', '<', 'cookieAck'), FilterNode('name', '>', 'newkey'), FilterNode('name', '<', 'tempCelsius')), AND(FilterNode('name', '<', 'cookieAck'), FilterNode('name', '>', 'newkey'), FilterNode('name', '>', 'tempCelsius')), AND(FilterNode('name', '>', 'cookieAck'), FilterNode('name', '<', 'newkey'), FilterNode('name', '<', 'tempCelsius')), AND(FilterNode('name', '>', 'cookieAck'), FilterNode('name', '<', 'newkey'), FilterNode('name', '>', 'tempCelsius')), AND(FilterNode('name', '>', 'cookieAck'), FilterNode('name', '>', 'newkey'), FilterNode('name', '<', 'tempCelsius')), AND(FilterNode('name', '>', 'cookieAck'), FilterNode('name', '>', 'newkey'), FilterNode('name', '>', 'tempCelsius'))))
Query(kind='UserSetting',filters=OR(AND(FilterNode('name','','tempcices')))
我不确定这是否是一个好的解决方案,因为查询可能会很慢,但它似乎确实有效。
query = UserSetting.query(ndb.AND(ndb.AND(UserSetting.name!='cookieAck', UserSetting.name != 'newkey'), UserSetting.name != 'tempCelsius'))
query = UserSetting.query(UserSetting.name!='cookieAck', UserSetting.name != 'newkey', UserSetting.name != 'tempCelsius')
Query(kind='UserSetting', filters=OR(AND(FilterNode('name', '<', 'cookieAck'), FilterNode('name', '<', 'newkey'), FilterNode('name', '<', 'tempCelsius')), AND(FilterNode('name', '<', 'cookieAck'), FilterNode('name', '<', 'newkey'), FilterNode('name', '>', 'tempCelsius')), AND(FilterNode('name', '<', 'cookieAck'), FilterNode('name', '>', 'newkey'), FilterNode('name', '<', 'tempCelsius')), AND(FilterNode('name', '<', 'cookieAck'), FilterNode('name', '>', 'newkey'), FilterNode('name', '>', 'tempCelsius')), AND(FilterNode('name', '>', 'cookieAck'), FilterNode('name', '<', 'newkey'), FilterNode('name', '<', 'tempCelsius')), AND(FilterNode('name', '>', 'cookieAck'), FilterNode('name', '<', 'newkey'), FilterNode('name', '>', 'tempCelsius')), AND(FilterNode('name', '>', 'cookieAck'), FilterNode('name', '>', 'newkey'), FilterNode('name', '<', 'tempCelsius')), AND(FilterNode('name', '>', 'cookieAck'), FilterNode('name', '>', 'newkey'), FilterNode('name', '>', 'tempCelsius'))))