9

我不明白这个错误是什么意思,显然,没有人在互联网上遇到过同样的错误

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

4

5 回答 5

17

错误消息试图告诉您涉及 IN 和游标的查询必须按__key__(这是实体键的内部名称)排序。(这是必需的,以便可以正确合并结果并使其唯一。)在这种情况下,您必须将.order()调用替换为.order(SocialNotification._key).

于 2012-09-16T23:04:36.493 回答
4

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

于 2012-09-17T20:31:29.843 回答
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 秒),至少在开发服务器上是这样。我在测试服务器上没有大量的测试数据。

于 2012-10-19T03:00:36.543 回答
0

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

为了解决这个问题,我实际上不得不按键添加排序。

于 2015-09-12T15:35:41.780 回答
0

您需要您想要订购的房产和钥匙。

.order(-SocialNotification.date, SocialNotification.key)
于 2018-05-21T01:11:33.410 回答