0

これは私が使用したインデックスの名前です

LongitudeLatitude_indexContents_1_prominent_-1

その -1 は問題があり、自動的に生成されます。それを LongitudeLatitude_indexContents_1_prominent_min1 に変更したい

か何か

インデックス作成には時間がかかります。したがって、インデックスの名前を変更するだけです。

例えば、

私が行った場合

db.tablebusiness.find({ "LongitudeLatitude" : { "$nearSphere" : [106.772835, -6.186753], "$maxDistance" : 0.044983732050783008 }, "Prominent" : { "$gte" : 15 }, "indexContents" : { "$all" : [/^warung/] } }).hint("LongitudeLatitude_indexContents_1_Prominent_-1").limit(50).explain();

私はこれを得た

> ).hint("LongitudeLatitude_indexContents_1_Prominent_-1").limit(50).explain();
Thu Sep 06 11:01:51 uncaught exception: error: { "$err" : "bad hint", "code" : 1
0113 }
4

2 に答える 2

2

なぜあなたは使用していhint()ますか?これは、私が今まで見た中で最も将来性のないコードの 1 つに違いありません。クエリがインデックスを効果的に使用していない場合は、実際にクエリを変更するか、別のインデックスを追加して、クエリがインデックス上で実行されるようにする必要があります。MongoDB 自体が見つけられないインデックスを強制的に使用すると、ショートカットを提供しない B ツリーを使用しようとするため、実際にはクエリがさらに遅くなる可能性があります。

クエリに影響を与えます:

db.tablebusiness.find({ "LongitudeLatitude" : { "$nearSphere" : [106.772835, -6.186753], "$maxDistance" : 0.044983732050783008 }, "Prominent" : { "$gte" : 15 }, "indexContents" : { "$all" : [/^warung/] } })

を使用せずに作成したインデックスを使用しhint()ます。より良いインデックスをこのクエリに対して 1 日より効果的にする場合、使用hint()すると、その新しいインデックスのためにこのクエリが高速化されなくなります。それだけでなく、すべてのコードでインデックス名を変更する必要があります。

As for changing the name of the index: I think you have to drop it first and then reindex creating a new index of your own name (though as @Thilo mentions, self named indexes are going to be removed).

于 2012-09-06T07:24:58.083 に答える
1

.hint("経度緯度_indexContents_1_Prominent_-1")

する必要があります

.hint({ LongitudeLatitude_indexContents: 1, Prominent: -1 })

于 2012-09-06T04:06:44.890 に答える