sql >> データベース >  >> NoSQL >> MongoDB

複数の2dsphereインデックス、geoNearを実行するかどうかわからない

    エラーメッセージが示すように、これは複数の2dsphereがあるためです。 インデックスなので、$geoNear どちらを使用すればよいかわかりません。

    この状況では、次のいずれかを実行できます。

    • 2番目の地理インデックスを削除する、または
    • keyを使用する $geoNearドキュメント に記載されているパラメータ :

    エラーはドキュメントにも記載されています:

    db.collection.getIndexes() を使用できます コレクションで定義されているすべてのインデックスを一覧表示します。

    keyの使用例を次に示します。 パラメータ:

    > db.test.insert([
      {_id:0, loc1:{type:'Point',coordinates:[1,1]}, loc2:{type:'Point',coordinates:[2,2]}},
      {_id:1, loc1:{type:'Point',coordinates:[2,2]}, loc2:{type:'Point',coordinates:[1,1]}}
    ])
    

    次に、2つの2dsphereを作成します インデックス:

    > db.test.createIndex({loc1:'2dsphere'})
    > db.test.createIndex({loc2:'2dsphere'})
    

    $geoNearを実行しています keyを指定せずに エラーを出力します:

    > db.test.aggregate({$geoNear:{near:{type:'Point',coordinates:[0,0]},distanceField:'d'}})
    ...
      "errmsg": "more than one 2dsphere index, not sure which to run geoNear on",
    ...
    

    key: loc1を使用する loc1に従って結果を並べ替えます インデックス(_id: 0 _id: 1の前に来る ):

    > db.test.aggregate(
        {$geoNear: {
            near: {type: 'Point',coordinates: [0,0]},
            distanceField: 'd',
            key: 'loc1'}})
    { "_id": 0, "loc1": { "type": "Point", "coordinates": [ 1, 1 ] }, "loc2": { "type": "Point", "coordinates": [ 2, 2 ] }, "d": 157424.6238723255 }
    { "_id": 1, "loc1": { "type": "Point", "coordinates": [ 2, 2 ] }, "loc2": { "type": "Point", "coordinates": [ 1, 1 ] }, "d": 314825.2636028646 }
    

    そして、key: loc2を使用します loc2に従って結果を並べ替えます インデックス(_id: 1 _id: 0の前に来る ):

    > db.test.aggregate(
        {$geoNear: {
            near: {type: 'Point',coordinates: [0,0]},
            distanceField: 'd',
            key: 'loc2'}})
    { "_id": 1, "loc1": { "type": "Point", "coordinates": [ 2, 2 ] }, "loc2": { "type": "Point", "coordinates": [ 1, 1 ] }, "d": 157424.6238723255 }
    { "_id": 0, "loc1": { "type": "Point", "coordinates": [ 1, 1 ] }, "loc2": { "type": "Point", "coordinates": [ 2, 2 ] }, "d": 314825.2636028646 }
    



    1. .netのmongodbでの全文検索

    2. Elastic BeanStalk+Djangoを使用したElastiCacheRedisのセットアップ

    3. Ubuntu11.04でmongodbを再起動できません

    4. MongoDB$演算子