2

現在のMongoDBドキュメントには、次のように記載されています。

現在のところ、コレクションごとに1つの地理空間インデックスしかありません。MongoDBでは複数のインデックスを作成できる場合がありますが、この動作はサポートされていません。MongoDBは単一のクエリをサポートするために1つのインデックスしか使用できないため、ほとんどの場合、複数のgeoインデックスがあると望ましくない動作が発生します。

ただし、コレクションに2つの地理空間インデックスを作成すると(Mongooseを使用)、それらは正常に機能します。

MySchema.index({
  'loc1': '2d',
  extraField1: 1,
  extraField2: 1
});

MySchema.index({
  'loc2': '2d',
  extraField1: 1,
  extraField2: 1
});

私の質問はこれです:それは機能しているように見えますが、MongoDBのドキュメントにはこれが「望ましくない動作を引き起こす」可能性があると書かれています。これまでのところ、テストでも使用でも、望ましくないものはまだ発見されていません。

私はこれについて心配する必要がありますか?答えが「はい」の場合、回避策として何をお勧めしますか?

4

1 に答える 1

5

まだサポートされていないので、 2つ作成しても、実際に正しく使用されているわけではありません。mongoシェルでexplain出力を調査し、地理空間的な方法でlocフィールドとloc2フィールドを使用するいくつかのクエリを発行します。たとえば、次のようになります。

use yourDbName
db.yourCollection.find( { loc: { $nearSphere: [ 0, 0 ] } } ).explain();

と:

db.yourCollection.find( { loc2: { $nearSphere: [ 0, 0 ] } } ).explain();

次に、説明情報が提供する内容を比較します。最初に作成された地理インデックスのみが両方の検索に使用されていることがわかります。JIRAには、投票したいチケットがいくつかあります。

于 2012-11-22T09:11:10.887 に答える