node.jsを備えたMongoDBのジオ空間インデックス
-
27-10-2019 - |
質問
以下に示すように、Geo Spatial Index '2D'を定義する際に問題を見つけています。何が問題になっているのかについての手がかりはありますか?
var Address = new Schema({
loc : {lat: Number, lng: Number },
Address : String,
create_date : {type: Date, default: Date.now}
});
Address.index ({
loc : "2d"
});
次のようにエラーを投げます
events.js:45スロー引数[1]; //ハンドルされていない「エラー」イベント ^エラー: 範囲ではない点 オブジェクトオブジェクト]で。 (/cygdrive/c/personal/software/nodejs/node/no de_modules/mongoose/node_modules/mongodb/lib/mongodb/db.js:503:20))
編集:コードを追加しました
var Address = new Schema({
type : {type: String, enum: ['Apartment', 'House', 'Serviced Apartment'], default: 'Apartment'},
loc : {lat: Number, lng: Number },
Address : String,
create_date : {type: Date, default: Date.now}
});
/*
Address.index ({
loc : "2d"
});
*/
mongoose.connect('mongodb://127.0.0.1:27017/test123', function(err) {
if (err) {
console.log("error in mongo connection");
throw err;
}
console.log("connected to mongo");
});
var RentModel = mongoose.model('Rent', Address);
socket = io.listen(app);
socket.sockets.on('connection', function(client){
console.log('inside on connection');
client.on('register', function(msg){
console.log("msg.geometry.type", msg.geometry.type);
var rent = new RentModel();
rent.type = 'Apartment';
rent.loc.lat = 23;
rent.loc.lng = 56;
rent.Address = "LLLLLLLLIIIIIIIOOOOOOONNNNNNNN"
console.log("before save");
rent.save(function(err){
console.log("rent.save start");
if(err) {
throw err;
console.log("error in save");
}
console.log("saved");
});
});
RentModel.find({loc : { $near : [20, 50], $maxDistance: 30 }} , function(err, docs){
if (err) {
console.log("error in finding near", err);
throw err;
}
console.log('docs.length : ' , docs.length);
console.log('docs : ',docs)
})
解決
また、アレイの緯度の前に経度が来ることを望むことも注目に値します。これは、2Dを使用している場合に影響しませんが、3Dを使用している場合には影響しません。数学的には、経度はx座標であり、緯度はy座標(x、y)であるため、これは理にかなっていますが、私たちのほとんどはまもなくLATが来ることに精通しています(そして、そこにある最高のマンゴの本の1つは、まもなくLATの例があります、しかし、それは2dをカバーしません)。
最終的には、2D計算が赤道から離れると正確ではないため、3Dを使用したい可能性があります。
更新:2015-12-08上記はもはや関連性がありません - 更新された回答/APIドキュメントを参照してください
他のヒント
あなたはそれを行う方法についてここでいくつかの参照が必要かもしれません:)念のため、誰かが興味を持っています
所属していません StackOverflow