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

クエリパラメータが機能しないGeoJSONポイントを使用したgeoNearへのMongoose呼び出し

    問題は、maxDistanceを誤って使用していたことです。次の式が機能しました。

    
    Branch.geoNear({type: "Point", coordinates: [0.0776590, -33.7797590]}, {
      spherical: true, 
      maxDistance: 1 / 6378137, 
      distanceMultiplier: 6378137
    })
      .then(function (doc) {
        console.log(doc);
        process.exit();
      });
    
    
    Mongoose: branches.ensureIndex({ location: '2dsphere' }) { safe: undefined, background: true }  
    Mongoose: branches.geoNear(0.077659) -33.779759 { distanceMultiplier: 6378137, lean: true, maxDistance: 1.567855942887398e-7, spherical: true } 
    []
    
    

    これで、クエリは、コレクション内の2つのドキュメントがクエリされた場所から1メートル以内にないことを正しく検出します。自宅に近い場所をクエリすると、期待どおりの結果が得られます。

    
    Branch.geoNear({type: "Point", coordinates: [153.027117, -27.468515]}, {
      spherical: true, 
      maxDistance: 1 / 6378137, 
      distanceMultiplier: 6378137
    })
      .then(function (doc) {
        console.log(doc);
        process.exit();
      });
    
    Mongoose: branches.ensureIndex({ location: '2dsphere' }) { safe: undefined, background: true }  
    Mongoose: branches.geoNear(153.027117) -27.468515 { distanceMultiplier: 6378137, lean: true, maxDistance: 1.567855942887398e-7, spherical: true } 
    [ { dis: 0.0026823704060803567,
        obj: 
         { name: 'A',
           _id: 533200e49ba06bec37c0cc22,
           location: [Object],
           __v: 0 } } ]
    
    

    解決策は?

    geoNearのMongoDbドキュメントには、geoJSONオブジェクトを使用する場合はmaxDistanceをメートル単位で、座標ペアを使用する場合はラジアンで表示する必要があると記載されています。

    これは間違っているか、私の理解が間違っています。

    上記のように、maxDistanceに1メートルを指定するのではなく、ラジアンで提供されます。



    1. 文字列としての二重引用符の使用

    2. セロリ労働者が一生懸命死んだ場合、仕事は再試行されますか?

    3. 一致、並べ替え、制限を使用してMongoDBAggregationを注文する方法

    4. MongoDB:データベースにアクセスするためのユーザー/パスワードを設定します