Geo Spatial Index in MongoDB con node.js
-
27-10-2019 - |
Domanda
Sto trovando un problema nel definire l'indice Spatiale Geo "2D" come mostrato di seguito. Qualche idea su cosa sta andando storto?
var Address = new Schema({
loc : {lat: Number, lng: Number },
Address : String,
create_date : {type: Date, default: Date.now}
});
Address.index ({
loc : "2d"
});
Lancia un errore come,
eventi.js: 45 argomenti di lancio [1]; // Errore "Errore" non gestito ^ Errore: punto non nella portata a [oggetto oggetto]. (/CygDrive/C/Personal/Software/NodeJS/Node/No de_modules/Mongoose/node_modules/MongoDB/lib/MongoDB/db.js: 503: 20)
Modifica: aggiunto il codice
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)
})
Soluzione
Vale anche la pena notare che vorrai che la longitudine venga prima della latitudine nel tuo array. Questo non ti influenzerà quando si utilizza 2D, ma lo farà quando usi 3D. Matematicamente questo ha senso come longitudine è la coordinata X e la latitudine è la coordinata y (x, y), ma la maggior parte di noi ha familiarità con la lagma che arriverà più tempo (e uno dei migliori libri Mongo là fuori ha un esempio con Lat in poco tempo , ma non copre 2D).
Alla fine probabilmente vorrai utilizzare 3D poiché i calcoli 2D non sono accurati mentre ti allontani dall'equatore.
AGGIORNAMENTO: 2015-12-08 quanto sopra non è più pertinente: consultare le risposte aggiornate/documenti API
Altri suggerimenti
Potresti desiderare qualche riferimento qui su come farlo :) e per qualcuno che viene dopo. Per ogni evenienza, qualcuno è interessato