問題タブ [mongodb-indexes]
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.
mongodb - MongoDB がクエリによく似た (正確ではない) 複合インデックスを使用できないのはなぜですか?
以下の Mongo インデックス戦略とクエリを検討してください。
索引:
クエリ:
上記のクエリの Explain は次を返します。
ここでの質問は、クエリが Index(as "indexOnly" : true) で完全に実行されることを明確に示しています。しかし、"scanAndOrder" : true
Btree インデックス モデルによると、c はインデックスの末尾にあるため、並べ替えに使用できるのはなぜですか。いいえ?
なぜ使われていないのですか?
c# - Mongo の明示的/暗黙的 AND 動作の違い
基本的な質問:
次の 2 つのクエリは同等であることを意味しますか?
もしそうなら、なぜ彼らは異なる行動を示すのですか? (下記参照)。そうでない場合、C# で前者を生成するにはどうすればよいですか?
さらなる議論
サブドキュメントのフィールドにインデックスを付けています。クエリ (A) ではインデックスが正しく使用されていますが、クエリ (B) では使用されていません。
サンプル コードを次に示します (mongo コンソールで直接動作します)。
最初のクエリは、期待どおりにインデックスを使用します。2番目はそうではありません。
質問のまとめ
- 2 つの find() クエリは同等ですか?
- もしそうなら、なぜ彼らの行動は違うのですか?そうでない場合、それらはどのように異なりますか?
- $and を使用せずに C# ドライバーを使用して find() を生成するにはどうすればよいですか?
編集--------
記録として、私が C# で使用している構文は次のようなものです。
$or は辞書のキーとして使用されるため、複数の $or クエリを含めることはできないため、手動で QueryDocument を生成することはできません (実際のクエリでは複数の $or が必要です)。
mongodb - 多くの次元に基づく MongoDB 地理空間検索
これには完全に困惑しました。私のデータベースにはuserTags、次のようなオブジェクトであるというフィールドを含むドキュメントがあるとします。
フィールドをクエリするときはuserTags、特定のユーザーが提供するタグに基づいて実行したいと考えています。たとえば、ユーザーは自分のアカウントに次のタグを持っている可能性があります。
これらのタグの例はすべて任意であることに注意してください。検索には 2 つのタグを含めることができ、5,000 のタグを含めることができます。すべてユーザー定義であり、残念ながら私が実際に制御できるものではありません。上位 5 ~ 10 個のタグを除くすべてのタグをカットするスクリプトを作成することもできますが、それよりも低くしたくはありません。
現時点ではsort()、最もカウントされたタグに基づいて機能を実行しています。
これはほとんどの場合機能しますが、問題のユーザーに合わせてもう少し調整したい. たとえば、ユーザーの観点からは は とほぼ同じくらい重要ですが、aaaに重みを与えることなく、 の順に結果を吐き出します。 foofooaaa
地理空間インデックス作成は、断然最良の選択肢のようです。ただし、ここには 2 つの大きな問題があります。
- これらはユーザー定義であり、何千もあり、絶えず変化しているため、私
ensureIndexにはできません。userTags.[tagname] - 私が見る限り、地理空間インデックスは 2 次元でしか機能しません。
ここでのオプションは何ですか? Mongo の地理空間機能を使用したことがないので、ポイントを完全に見逃している可能性がありますuserTags。全体としてインデックスを作成し、含まれているタグで地理空間検索を実行できますか?
mongodb - デフォルトの _id_ インデックスはmongoqueryで使用されますか?
以下のように言及されているmongoコレクションがあると仮定しましょう
db.test.findOne() { "_id" : ObjectId("52d0313dc62b629cfabe22ff"), "a" : 1, "b" : 1, "c" : 1 }
このコレクションには 100 万件以上のレコードがあります。
ここで、フィールド "a" が 1000 より大きく、"b" フィールドが 9000 より小さい条件を持つレコードを見つけたい場合、mongo クエリは次のようになります。
db.test.find({'a':{'$gt':1000}, 'b':{'$lt': 9000}}, {'a':1, 'c':1}) と上記の検索を高速化します。「a」および「b」フィールドに複合インデックスを既に適用しています。上記のクエリで使用されています..
ここで、お気づきのように、すべてのコレクションには、主キーの「_ id _」フィールドにデフォルトのインデックスが付属しています。
上記のmongoクエリはデフォルトのインデックス「_ id _」を使用していますか? はいの場合、どのように?そうでない場合は、なぜですか?
ありがとうございます
mongodb - 2dsphere と 2d index: どちらが「より良い」/より高速ですか?
私は私の文書だけがあるデータベースを持っていますPoints。地理空間インデックスを追加することを検討しています。したがって、2dsphereと2dsphereのどちらかを選択できます。
MongoDB.org には次のものがあります。
2dsphere インデックスのサポート:
2d インデックスのサポート:
ただし、私のドキュメントはすべてポイントであるため、スキーマに以下のオプションのいずれかを含めることができますが、大きな違いはありません。
2dsphere の場合:
または 2 次元インデックスの場合:
私の質問はどちらが速いですか? どうやって測ればいいのか、まったくわかりません。
質問は、データの正方形をクエリしたいだけでbox、複雑なポリゴン検索を気にしないことを前提としています: 2d インデックスでのみサポートされている$boxを使用するか (正しく読み取った場合)、または$geoWithi nの$polygonメソッドを使用します両方のインデックスでサポートされています。
mongodb - mongodb のネストされた 2D 配列の射影とインデックス
このようなネストされた配列に関連するいくつかの質問があります (タイトルにネストされた配列が含まれる実質的にすべての SO の質問は、実際には 2D のネストされた配列ではなく、ルート ドキュメントにネストされた単一の配列を参照していることに注意してください。私の知る限りでは、 、これは重複ではありません)。
- 上記のように、ネストされた 2D 配列で射影を実行する方法はありますか?
- foo 配列の配列の 2 番目の要素にインデックスを作成するにはどうすればよいですか? 繰り返しますが、おそらく foo.1 は機能しません。
正しい答え (TM) は、それを行わず、サブドキュメントの配列、ダミー (NDTAUAAOSD) を使用することですが、a) 好奇心 - 答えが見つからないようです。b) 残念ながら、私の制御を超えた状況がドキュメントを決定します。構造。
更新:予測から見たいことの明確化:
基本的に、内側の配列をスライスします。
mongodb - 複合およびハッシュ化されたmongodbインデックスを定義する方法は?
複合インデックスは次のように定義されることを知っています。
そして、次のようなハッシュされた単純なインデックス:
問題は、両方を達成する方法ですか?