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)
            })
È stato utile?

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

http://www.jmanzano.es/blog/?p=592

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top