問題タブ [compound-index]

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.

0 投票する
2 に答える
753 参照

mongodb - Mongodb 複合 2dsphere インデックスが期待どおりに機能しない

次のような約20000のドキュメントを含むsearch2というコレクションがあります。

次のコマンドでインデックスを定義します。

コレクションには、このインデックスと「_id」フィールドのデフォルト インデックスのみがあります。

次のクエリを実行すると、「nscannedObjects」が = 10 になると予想されます。

しかし、これは結果です:

クエリから並べ替えを削除すると、次のようになります。

では、なぜインデックスを使用して結果を並べ替えないのでしょうか? このドキュメントから : http://docs.mongodb.org/manual/applications/geospatial-indexes/ http://docs.mongodb.org/manual/tutorial/sort-results-with-indexes/ 2dsphere インデックス フィールドのプレフィックスまたはサフィックスとしてスカラー インデックス フィールド (つまり、昇順または降順) を持つ複合インデックス" および "並べ替えドキュメントが複合インデックスのサブセットであり、インデックスの先頭から開始する場合、MongoDB は使用できますクエリ結果の取得と並べ替えの両方に使用するインデックス。"

私は何が欠けていますか?

前もって感謝します

0 投票する
1 に答える
1307 参照

mongodb - 地理的位置を持つMongo複合インデックスが機能しない

私は些細なことで苦労しています....
私は次のプロファイルドキュメント構造を持っています:

私のアプリの一般的な使用例は、年齢でフィルタリングされた近くのプロファイルを取得することです。

そこで、次の複合インデックスを作成しました。

そして、私が何をしても、作成されたインデックスでクエリを実行することはできません(ヒントも試しました)
。これは、クエリに対して生成された説明です:

mongodb バージョン 2.4.4 を使用しています。

私は何を間違っていますか?あなたの答えは高く評価されています。

0 投票する
1 に答える
2822 参照

indexeddb - IndexedDB IDBKeyRange複合/複数インデックスが機能しない

私のIDBKeyRangeが最初の列でのみフィルタリングされているように見える理由を誰かが説明できますか?

次のように定義されたインデックスがあります。

私のクエリはおおよそ次のとおりです。

私の結果は、tmpName から tmpName + "z" までフィルタリングしているように見えますが、強度、フォーム、およびパックサイズを完全に無視しています。

誰かが私が間違っていることを見ることができますか?

ああ、すべてのフィールドは文字列として保存されます....

乾杯、

ダン

追加情報:

複合インデックスを使用して作成した別のテーブルは機能しているようです。これらの表の違いは次の 2 つだけです。

1) 機能するテーブルには、インデックスに 2 つのプロパティしかありません。2) 機能するテーブルでは、両方のプロパティが 3 つのプロパティの主キーの一部です。

Chrome の [リソース] タブを使用して、このテーブルで機能することをテストしました。これにより、インデックスを下限キーでフィルター処理してデータを返すことができます。

その他の追加情報:

さらにテストを行った後、FF に切り替えてクロムではないことを確認しましたが、問題を発見したと思います。その複合インデックスの検索が期待どおりに機能するとは思えません...

IDBKeyRange は実際には範囲です...たとえば、入力すると、

["PARA","500","TAB","32"] ["PARAz","500z","TABz","32z"]

IndexedDB は、LB で始まる最初の薬物を検索し、上限で終わる最後の薬物まですべてを選択します。

だからこそ、どんな価値からでも強みを選択できるのだと思います。実際には、「500」で始まる強度をフィルタリングするのではなく、薬物の「500」の最初のインスタンスから最後のインスタンスまでのすべてを選択しています。

私の仮定が正しければ、次の記事はおそらく少し間違っている/誤解を招く可能性があります (ユーザーは範囲ではなく四角形を検索したかったと思われるため:

複数のプロパティに対するインデックス付き DB カーソル範囲

誰かが私が見つけたことを確認し、実際に複数の値で IndexedDB を検索できる方法があるかどうか教えてもらえますか? 上記の記事の最後で、誰かが交差関数について言及していますが、これはうまくいくと思いますが、オンラインで検索すると存在しないようです...

乾杯、

ダン

0 投票する
1 に答える
1890 参照

mongodb - 間違ったインデックスを使用している Mongodb

次のように、コレクションに複数のインデックスがあります。特に、クエリで を使用したいのですが、代わりに"gTs_1_RE_H_1_l_1"クエリが使用されています。"gTs_1"

ここでは、' ' 単独のインデックス(TTL ベースのインデックス) と、' ' と ' ' を最初の 2 つのキーgTsとする複合インデックスがあります。( )gTsRE_H"gTs_1_RE_H_1_l_1"

今、私はこのクエリを実行しようとしています:

これは私の知る限り、を使用する必要があります"gTs_1_RE_H_1_l_1"が、驚くべきことに、 "gTs_1"次の出力で言及されているように使用しています。

ただし、ヒントを提供すると、正しいインデックスが取得されます。したがって、次のクエリを実行すると:

次の出力が得られます。

誰かが何が起こっているのか理解するのを手伝ってくれませんか!

0 投票する
2 に答える
2802 参照

javascript - IndexedDB での複合インデックスの検索

ここで何年も読んだ後、ついに登録して質問をしました。私は最近 IndexedDB をいじっていて、複合インデックスの問題に遭遇しました (ここの例と同じように使用しています)。

オブジェクトストアに、文字列値といくつかの整数値を持つオブジェクトがあります。例:

次のように、このオブジェクトに複合インデックスを作成しました。

HTML には、ユーザーが特定のエントリを検索できるようにする、いくつかの選択ボックスとテキストフィールドがあります。整数はキー範囲としてインデックスの opencursor-function に渡されます。次に、結果のセットで indexOf(textfield) を使用します (ここで行われたように)

選択ボックスに値がある場合、その値が上限と下限として使用されます。選択ボックスが変更されていない場合、下限は 1 で、上限は宣言した MAX_INT 変数です (ここで説明したように)。

サンプルコード:

すべての選択ボックスにすべての値を設定すると、エントリを完全に検索できます。ただし、フィールドを開いたままにしておくと、検索が台無しになります。value1-select ボックスに触れておらず、他のボックスを 2 に設定すると、lowerBound = [1,2,2] と upperBound = [4294967295,2,2] が得られます。これにより、IDB のすべてのエントリが返されます。2 番目と 3 番目の値は考慮されません。

これは意図したものですか?または、これを回避する方法はありますか?私はこれについて何度も情報を探してきましたが、行き詰まっているようです。この API についての素朴な理解から、検索時にすべての配列フィールドが考慮されると信じるようになりました。私が使用するオブジェクトとそのためのインデックスは、上記の例よりもはるかに複雑であるため、複数のインデックスで検索を実行するのは非常に面倒です。

あなたの洞察に感謝します!

編集:最初のコメントの後にもう少し明確にするために。オブジェクト ストアに次のオブジェクトがあるとします。

インデックスは期待どおりに並べ替えます。

範囲 (lower[1,1,1] 、 upper[1,1,1]) を検索すると、obj4 が得られると仮定しましょう。これは、すべての選択ボックスでオプション 1 が選択されている場合の動作です。ここで、val1 = 1、val2 = 不明、および val3 = 1 のエントリを検索すると、次の範囲が得られます: lower[1,1,1] 、 upper[ 1,4294967295,1]。期待される結果は、obj4 [1,1,1] および obj1 [1,3,1] です。これらの代わりに、obj2 と obj5 の val3 はキー範囲と一致しませんが、結果は obj4、obj2、obj5、obj1 の 4 つのヒットを与えています。

0 投票する
1 に答える
357 参照

mongodb - MongoDB の複合地理空間インデックスが意図したとおりに機能しない

コレクション nodesWays には次のインデックスがあります。

次の 2 つのクエリは同じ結果を返すはずですが、そうではありません。指定したポイントに最も近い 10 軒のレストランが必要です。最初のクエリは正常に動作していますが、2 番目のクエリは意図したとおりに動作していません。

これら 2 つのクエリの唯一の違いは、最初のクエリが geo_2dsphere-Index を使用し、2 番目のクエリが amenity_1_geo_2dsphere-Index を使用することです。

2 番目のインデックスの目標は次のとおりです。すべてのレストランを選択し、nearSphere-Operator を使用して、指定されたポイントからの距離に関してそれらを並べ替えます。

アウフ・ヴィーダーゼヘン

0 投票する
1 に答える
258 参照

mongodb - MongoDB インデックス、通常と複合の両方を同時に作成することは可能ですか?

MongoDb コレクションのインデックスを作成する必要があります。

ユーザー

  • _id
  • app_version
  • 国コード
  • FacebookのID
  • トークン
  • ユーザーID
  • デバイスID

1. クエリの 30% は {_id, token,device_id} です

2.その他の一般的なクエリ (30%) は {_id, token}です

3. 残り (40%) は、{_id} {device_id} {userid} {facebook_id} を個別に使用し クエリ です

私はそれを管理する方法がわかりません。{_id:"1" , token:"1",device_id:"1"}に複合インデックスを作成する必要があることはほぼ確実です。私の質問は次のとおりです。

a) 複合インデックスは最初と 2 番目のケースを最適化しますか?

b) ケース 3 の場合はどうすればよいですか?フィールドごとにインデックスを作成しますか?

ありがとう!