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

Mongoでは、$nearと$nearSphereの違いは何ですか?

    キーワードはsphereです $near を区別する および $ nearSphere 。

    ご存知のとおり、$nearSphere 球面幾何学を使用して距離を計算すると述べられています。これは、地球の地図投影 に関連しています。 (歪み )。 MongoDB2dインデックス デカルト に基づいています およびMongoDB2dsphereインデックス Geodesic に基づいています 。

    十分な理論ですが、いくつかの例を使用してみましょう。以下のように2つのドキュメントがあるとしましょう:

    db.map.insert({ "_id": "Westfield London", "location": [ -0.22157, 51.507176 ] });
    db.map.insert({ "_id": "Green Lanes Shopping Centre", "location": [ -0.098092, 51.576198 ] });
    

    両方のオペレーターのマニュアルには、使用できることが明記されています:

    インデックス:2dsphere、クエリ:GeoJSON

    db.map.createIndex({"location": "2dsphere"});
    
    db.map.find({"location":{"$nearSphere":{"$geometry":{"type":"Point", "coordinates":[ -0.127748, 51.507333 ] }}}});
    
    db.map.find({"location":{"$near":{"$geometry":{"type":"Point", "coordinates":[ -0.127748, 51.507333 ]}}}});
    

    この場合、インデックスは2dsphereに保存されているため、両方のクエリは同じ結果を返します。 。

    結果:

    [ /* $nearSphere */
        {"_id" : "Westfield London"},
        {"_id" : "Green Lanes Shopping Centre"}
    ]
    [ /* $near */
        {"_id" : "Westfield London"},
        {"_id" : "Green Lanes Shopping Centre"}
    ]
    

    インデックス:2d、クエリ:レガシー座標

    db.map.createIndex({"location": "2d"});
    
    db.map.find({"location":{"$nearSphere":[ -0.127748, 51.507333 ]}});
    
    db.map.find({"location":{"$near":[ -0.127748, 51.507333 ]}});
    

    ここで区別が行われ、$nearSphereの結果が表示されます $nearはインデックスに関係なく、球形に計算されます。 フラットプロジェクションで計算されます。

    結果:

    [ /* $nearSphere */
        {"_id" : "Westfield London"},
        {"_id" : "Green Lanes Shopping Centre"}
    ]
    [ /* $near */
        {"_id" : "Green Lanes Shopping Centre"},
        {"_id" : "Westfield London"}
    ]
    

    要点:JSテストスクリプト を参照してください。 上記の例の。これは、MongoDBv3.4.4を使用してテストされました。

    Geospatial Indexes andQueries も参照してください。 。




    1. MongoDBクエリ:$ near withgregation

    2. フィールドのタイプを変更するにはどうすればよいですか?

    3. MongoDBのクエリプランからインデックスを非表示にする3つの方法

    4. MongoDBでの大文字と小文字を区別しない並べ替え