9

このエラーが何を意味するのか理解できません。どうやら、インターネット上で同じエラーが発生したことはありません

BadArgumentError: カーソルのある _MultiQuery には__key__順序が必要です

これはここで起こります:

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

プロパティsource_keyは明らかにキーでnodes_listあり、以前に取得したエンティティ キーのリストです。

必要なのは、リスト内のキーの 1 つに一致SocialNotificationsするフィールドを持つすべての を見つけることです。source_key

4

5 に答える 5

17

このエラー メッセージは、IN とカーソルを含むクエリは__key__(エンティティのキ​​ーの内部名) で並べ替える必要があることを示しています。(これは、結果を適切にマージして一意にするために必要です。) この場合、.order()呼び出しをに置き換える必要があります.order(SocialNotification._key)

于 2012-09-16T23:04:36.493 に答える
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 に答える
4

これは、不等式をフィルタリングしてページをフェッチしようとしたときにも発生するようです。(たとえば、 MyModel.query(MyModel.prop != 'value').fetch_page(...)これは基本的に(何かを見逃していない限り)、不等式フィルターを使用する場合は fetch_page できないことを意味します。これは、一方では並べ替えが必要であるMyModel.propが、他方でMyModel._keyはそれが難しいためです:)

于 2012-09-17T20:31:29.843 に答える
0

グループなしでフィルタリングすると、同じエラーが発生しました。フィルターが複数の結果を返すたびにエラーが発生しました。

それを修正するには、実際にキーによる順序付けを追加する必要がありました。

于 2015-09-12T15:35:41.780 に答える