問題タブ [gql]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
google-app-engine - Google App Engine: Gql LIKE クエリを実行できますか?
本当にシンプルなもの。SQL では、テキスト フィールドでいくつかの文字を検索したい場合、次のように実行できます。
App Engine のドキュメントには、これを達成する方法については言及されていませんが、これは十分に一般的な問題なのでしょうか?
python - Python: GQuery 結果セットの DISTINCT (GQL、GAE)
匿名ユーザーのリンクを格納するエンティティが Google App Engine データストアにあるとします。次の SQL クエリを実行しようとしていますが、これはサポートされていません:
代わりに、次を使用できます。
Python を最も効率的に使用して結果をフィルタリングし、DISTINCT 結果セットを返す方法は? DISTINCT 結果セットをカウントする方法は?
google-app-engine - エンティティ関係を効果的にスパンする GQL クエリ
Django データベース モデルのようなクエリで、Google App Engine エンティティ関係にまたがる必要がある状況にいます。ListProperty
次のように、1対多の関係に s を使用しています。
そして、次のことを行うクエリを実行したいと思います。
理解は根本的に非効率的です。コメントアウトされた部分のようにクエリを実行したいのですが、属性の属性に対するクエリがGQL 構文で許可されているようには見えません。
google-app-engine - GQL で結果をカウントする最良の方法は何ですか?
カウントを行う1つの方法は次のようなものだと思います:
私が気に入らないのは、カウントが最大 1000 に制限され、クエリがおそらく遅くなることです。回避策がある人はいますか?1つ考えていますが、きれいに感じません。GQL だけに本当の COUNT 関数があれば...
google-app-engine - Google App Engineデータストアでの不正確なクエリの適切なパターンは何ですか?
Google App Engineデータストアのクエリ言語(gql)は、「LIKE」のような不正確な演算子や大文字と小文字を区別しない演算子を提供していません。フィールドの小文字バージョンを保存することで、大文字と小文字を区別する問題を回避できます。しかし、人を検索したいのに名前のスペルがわからない場合はどうなりますか?このシナリオに対処するための受け入れられたパターンはありますか?
google-app-engine - エンティティの子に対する Google App Engine クエリ (フィルタではない)
クエリでエンティティの子を使用できますか?
与えられた:
500 の工場が 500 個の製品を製造し、合計 250,000 個の製品があるとします。特定の 1 つの工場で製造された 500 個の製品だけを返すリソース効率の高いクエリを作成する方法はありますか? 祖先メソッドはフィルターであるため、たとえば Product.all().ancestor(factory_1) を使用すると、データストアを繰り返し呼び出す必要があります。
google-app-engine - Google App Engine でインターネット ハイスコアを実装する方法
ゲームにインターネットのハイスコアを実装したいと考えています。そして、プレイヤーにフィードバックを提供します (トップ 100 などだけではありません)。通常の SQL では、次のようになります。
SELECT COUNT(*) FROM Scores WHERE points > :newUsersPoints
とGQLには似たようなものがあります
db.GqlQuery("SELECT * FROM Score WHERE points > :1", newUsersPoints).count()
しかし、count() は 1000 に制限されているため、私の場合はあまり役に立ちません。これを実装する方法についてのアイデアはありますか?
私は2つを持っています
初め:
シャーディング カウンターのアイデアを使用する ( http://code.google.com/intl/pl/appengine/articles/sharding_counters.html ) ある範囲 (from_points、to_points) 内にいくつのスコアがあるかを格納する新しい「テーブル」を作成します。
range.to_points < newUsersPoints である上記の表のすべてのカウンターを合計します
新しいスコアが db.GqlQuery("SELECT * FROM Score WHERE points > :1 AND points >= :2 AND points < :3", newUsersPoints, range.from_points, range. to_points).count() + sumfrom2
新しいスコアが含まれる範囲を見つけ、そのカウンターをインクリメントします
3. カウンターが 1000 (または 999) より大きい範囲を分割して、限界に達しないようにします。
新しいスコアをスコア テーブルに追加する
これは非常に複雑で、エラーが発生しやすいものです。スコアを追加する前に、範囲とタイムアウトをインクリメントする場合があります。(非トランザクション)
2番目のアイデア:
時々 (毎日 1 回?) すべてのスコアをポイントで並べ替え、新しい位置を与えます (スクリプトはタイムアウトする可能性があるため、チャンクで実行する必要があります)。
新しいスコアがどの場所にあるかを調べるには、次のことを行います
db.GqlQuery("SELECT * FROM Score WHERE points > :1 LIMIT 1", newUsersPoints).get().precalculated_position + 1
他のアイデアはありますか?
python - Google AppEngine: 日付範囲が正しい結果を返さない
特定のタイプの日付範囲内でいくつかの値を検索しようとしていますが、データベースに存在する日付のコンテンツがクエリによって返されません。
以下は Python コードの抜粋です。
GQL はデータを返しますが、期待しているいくつかの行が欠落しています。
バルクロード スクリプトを使用してデータをアップロードしました。インデックスが壊れているか、それに似たものだと思います。この同じクエリは、私が持っていた別のテーブルで機能していました。しかし、別のソースからの新しいコンテンツに置き換える必要があり、この新しいコンテンツは同じようにクエリに応答しません。それが違いを生む場合、テーブルには約700.000行があります。
さらに調査を行ったところ、appEngine DataStore のバグのようです。バグの詳細については、次のリンクを確認してください: http://code.google.com/p/googleappengine/issues/detail?id=901
インデックスを削除して再作成しようとしましたが、うまくいきませんでした。
ありがとう