1

さまざまなデータを含む MongoDB コレクションがあります。(約百万)

これらのデータには次のようなデータ構造が{k: {a:1,b:2,c:{},...}}あり、その内容が正確にはわかりません。

今、私はこのコレクションを数えて、k使用して空ではないコレクション内の合計要素を返したいと思っています{k:{$exists:true}}が、それは非常に遅いことがわかりました...

次に、インデックスを追加しkて : でクエリを実行しようとしまし{k:{$gt:{}}たが、正しい結果が返されません。

では、今コレクションを頼りにこれを行うにはどうすればよいでしょうか。

のデータ構造がわからないことに注意してくださいk

4

3 に答える 3

1

バージョン2より前のバージョン$existsを使用している場合、インデックスを使用できません。この回答を参照してください:https ://stackoverflow.com/a/7503114/131809

したがって、MongoDBのバージョンをアップグレードしてみてください

ドキュメントから:

v2.0より前では、$existsはインデックスを使用できません。他のフィールドのインデックスは引き続き使用されます。
$existsはインデックスがあってもあまり効率的ではありません。{$ examples:true}を使用すると、すべてのインデックス値を効果的にスキャンする必要があるためです。

その2番目の部分は、おそらく重要な部分です。

sparseここではインデックスが鍵になるようです...

于 2012-12-14T12:45:55.303 に答える
0
db.collection.count({k:{$ne:null}})

ところで、k ではスパース インデックスを使用します。

db.collection.ensureIndex({k:1}, {sparse: true});
于 2012-12-14T12:42:02.650 に答える
0

使ってみて$ne : null

したがって、コード例に従って:

{k:{$ne : null}}
于 2012-12-14T12:18:23.833 に答える