BadArgumentError:带游标的_MultiQuery在ndb中需要__key__顺序

时间:2012-09-16 17:45:21

标签: google-app-engine google-cloud-datastore

我无法理解这个错误意味着什么,显然,没有人在互联网上遇到同样的错误

  

BadArgumentError:带游标的_MultiQuery需要__key__订单

这发生在这里:

return SocialNotification.query().order(-SocialNotification.date).filter(SocialNotification.source_key.IN(nodes_list)).fetch_page(10)

属性source_key显然是一个键,nodes_list是以前检索过的实体键列表。

我需要找到的所有SocialNotifications字段source_key与列表中的某个键匹配。

5 个答案:

答案 0 :(得分:17)

错误消息会尝试告诉您涉及IN和游标的查询必须按__key__排序(这是实体密钥的内部名称)。 (这是必需的,以便结果可以正确合并并变得独一无二。)在这种情况下,您必须将.order()来电替换为.order(SocialNotification._key)

答案 1 :(得分:4)

我在这里找到答案:https://developers.google.com/appengine/docs/python/ndb/queries#cursors

您可以将查询更改为:

SocialNotification.query().order(-SocialNotification.date, SocialNotification.key).filter(SocialNotification.source_key.IN(nodes_list)).fetch_page(10)

为了让这个工作。请注意,当nodes_list很大(1000个实体)时,它似乎很慢(18秒),至少在开发服务器上。我没有大量的测试 测试服务器上的数据。

答案 2 :(得分:3)

当您过滤不等式并尝试获取页面时,似乎也会发生这种情况。 (例如MyModel.query(MyModel.prop != 'value').fetch_page(...)。这基本上意味着(除非我遗漏了一些东西)你在使用不等式过滤器时无法获取fetch_page,因为一方面你需要排序为MyModel.prop但另一方面你需要它是MyModel._key,这很难:)

答案 3 :(得分:0)

在没有群组的情况下进行过滤时遇到了同样的错误。 每次我的过滤器返回多个结果时都会发生错误。

要修复它,我实际上必须按键添加排序。

答案 4 :(得分:0)

您需要输入您要订购的物业并输入钥匙。

Velocity