node.js
  • google-app-engine
  • google-cloud-datastore
  • 2017-11-21 7 views 1 likes 
    1

    Google App EngineでDatastoreデータベースを使用してNodeJSを使用しています。OR条件付きのGoogle Datastoreフィルタ

    私は複合クエリフィルタを使用しており、基本的な "OR"条件が必要です。

    例:偽OR優先= 4

    const query = datastore.createQuery('Task') 
        .filter('done', '=', false) //How to make this an OR condition? 
        .filter('priority', '=', 4); 
    

    =完了しているクエリタスクしかし、the documentationによると:

    Cloud Datastoreのは、現在唯一のネイティブフィルタにAND演算子と を組み合わせてサポートしています。

    完全に別々の2つのクエリを実行して結果を結合しないで、基本的なOR条件を達成する良い方法はありますか?

    UPDATE

    私は私のsolution described in detail here in my other postを持っています。私がまだNodeJSを学んでいるので、ソリューションの改善のためのフィードバックは高く評価されます。

    +1

    私は同じシナリオを持っています。あなたはこの問題の解決策を見つけましたか? –

    +1

    私の解決策は私の他の記事で詳しく説明しました。解決策の改善のためのフィードバックは高く評価されます(私はまだNodeJSを学んでいます)https://stackoverflow.com/a/47539300/2183592あなたに感謝してくれたら助かりましょう! – pengz

    答えて

    1

    現在、ORの条件でクエリを実行することはできません。これは、引用したメモの意味です。

    一部のクライアントライブラリでは、ORのような操作がサポートされています。 Restrictions on queriesから:

    インデックスクエリメカニズムの性質は、クエリが何ができるかに一定の制限を課し 。 Cloud Datastoreのクエリでは、部分一致、大文字と小文字を区別しない一致、またはフルテキストの 検索と呼ばれる の検索はサポートされていません。 NOTOR、および!=オペレータはネイティブで に対応していませんが、一部のクライアントライブラリでは、Cloud Datastoreの上にサポートが追加される場合があります。

    しかし、AFAIKでは、このようなライブラリはNodeJSで使用できません。

    いくつかの具体的なクエリが必要な場合は、(エンティティの作成時に)そのようなクエリに対して望ましい結果を持つ追加のプロパティを計算し、代わりにそのプロパティで等価クエリを使用することが考えられます。

    • .filter('status', '=', 'queued')
    • .filter('status', '=', 'running')

    あなたはnot_doneようにするたびにプロパティを計算することができます:あなたはこれらのフィルタの同等物を-ing ORでクエリをみたいと仮定すると例えば

    statusqueuedまたはrunningのいずれかである場合はtrueに設定しますそれ以外の場合はfalseとなります。次に、同じセマンティクスを持つ.filter('not_done', '=', true)を使用できます。確かに、それは便利ではありませんが、障害を乗り越える可能性があります。

    関連する問題