0

_idコレクション Aに化合物があるとします。

{
    _id:{
       orgUnit:Int64
       ...
    }
}

そのようなクエリを実行すると、インデックスが使用されていることがわかります。

db.A.find({_id:{orgUnit:1039}}).explain() 

...

    "indexBounds" : {
            "start" : {
                    "_id" : {
                            "orgUnit" : 1039
                    }
            },
            "end" : {
                    "_id" : {
                            "orgUnit" : 1039
                    }
            }

しかし、クエリを「ドット表記」に変更すると、クエリがプレーンになったことがわかります。

db.A.find({"_id.orgUnit":1039}).explain()
...
"indexBounds" : {

},

ドット表記の何が問題になっていますか? そしてメイン: インデックスを活用して検索できるようにする方法"_id.orgUnit"

4

2 に答える 2

2

'_id.orgUnit'ドット表記を使用してそのフィールドを効率的にクエリするには、別のインデックスを作成する必要があります。

db.A.ensureIndex({'_id.orgUnit': 1})
于 2012-11-16T14:42:55.713 に答える
2

これら 2 つのクエリは、2 つの異なる意味を持ちます。

_id最初のものは、「正確にオブジェクトであるドキュメントを見つけてください」のようなものです{orgUnit: 1039}。2 つ目は、「プロパティが 1039 に等しい_idオブジェクトであるドキュメントを検索する」のようなものです。orgUnit

したがって、2 番目のクエリはより弱く{_id: {foo: "bar", orgUnit: 1039}}、最初のクエリでは一致しないのと同様に、ドキュメントとも一致します。Mongo は index on_idを使用して 2 番目のクエリを実行できません。

于 2012-11-16T13:40:33.033 に答える