14

Node.js と Mongoose を使用して MongoDB にアクセスしています。いくつかの地理座標を格納するモデルを使用しています。それらにインデックスを付けましたが、すべてが期待どおりに機能しているようです。私がやろうとしているのは、リクエストから最も近いものを取得することです。MongoDB コンソールで、次のようなことを行います。

distances = db.runCommand({ geoNear : "deals", near : [11.252, 14.141], spherical : true, maxDistance : 300  }).results 

ただし、Mongoose でこれを行う方法がわかりません。私が使用しようとしているコマンドの詳細は次のとおりです。 http://www.mongodb.org/display/DOCS/Geospatial+Indexing

ありがとう、ホセ

4

4 に答える 4

5

まず第一に、Mongoose で geoNear を直接使用する便利なラッパーはまだありません (計算された距離を読み取りたい場合)。

しかし、Mongoose コレクションはネイティブのMongoDB ネイティブ ドライバーからすべてのコレクション メソッドをプロキシするため、 geoNear メソッドを使用するだけで済みますが、Mongoose に期待する利便性を少しあきらめる必要があり、私の発見では、エラー処理が少し異なりました。 .

とにかく、これは上記のAPIを使用する方法です:

YourModel.collection.geoNear(lon, lat, {spherical: true, maxDistance: d}, function(err, docs) {
  if (docs.results.length == 1) {
    var distance = docs.results[0].dis;
    var match = docs.results[0].obj;
  }
});

正しいエラー処理と距離の計算方法については、ドキュメントを参照してください。

于 2012-08-06T08:52:52.853 に答える
1
YourModel.db.db.executeDbCommand({geoNear : "locations", near : [11.252,14.141], spherical: true }, function(err,res) { console.log(res.documents[0].results)});

ノード0.6.6、mongoose @ 2.4.9、mongodbバージョンv2.0.2

少しハッキーで、変更される可能性があります。

于 2012-01-16T13:09:23.570 に答える
0

Mongoose は現在サポートしていないと思いますrunCommandfind次の方法を使用して地理空間オプションを使用する方がよいでしょう。

db.places.find( { location : { $near : [50,50] , $maxDistance : 300 } } )
于 2011-05-02T19:02:31.047 に答える
0

これがうまくいくことを願っています!! 参考URL: http ://mongoosejs.com/docs/api.html

// レガシー ポイント

Model.geoNear([1,3], { maxDistance : 5, spherical : true }, function(err, results, stats) {
   console.log(results);
});

// geoJson

var point = { type : "Point", coordinates : [9,9] };
Model.geoNear(point, { maxDistance : 5, spherical : true }, function(err, results, stats) {
   console.log(results);
});
于 2016-11-28T12:38:40.483 に答える