2015-05-01 2 views
0

Я работаю с nodejs (expres framwork) и mongodb с mongoose. И я пытаюсь сохранить координаты геолокации в моем db.Не удается извлечь гео-ключи (nodejs and mongo)

Это как моя схема выглядит следующим образом:

//defining a schema 
var TopicSchema = mongoose.Schema({ 
    topicTitle: String, 
    topicDescription: String, 
    topicDateCreated: { 
     type: Date, 
     default: Date.now 
    }, 
    fbId: String, 
    twId: String, 
    location: { 
     type: { 
     type : String 
     }, 
    coordinates: [Number] 
    } 
}); 

TopicSchema.index({ location: '2dsphere' }); 
var Topic = restful.model('topic', TopicSchema); 
Topic.methods(['get', 'put', 'post', 'delete']); 
Topic.register(app, '/data'); 

Via Socket.io Я передавать данные на сервер. Сервер принимает данные, но при сохранении его я получаю следующее сообщение об ошибке: ==> MongoError: Невозможно извлечь ключи гео

Кто-нибудь знает, где я пошло не так в моем коде ...

ответ

0

Ошибка здесь:

var coordinates = LON + ", " + LAT;

Что здесь происходит то, что вы объединяете два числа со строкой, а ваш coordinates станет строкой. Ваша схема определена как массив точек местоположения с [Number]. Отправка вашего coordinates в виде строки приведет к нарушению определения вашей схемы.

Чтобы решить вашу ошибку, создайте массив геологических точек, например, например. var coordinates = [LON, LAT];

0

MongoDB использует долготу -latitude для хранения индекса геолокации. Эти координаты находятся в значениях float, но вы помещаете их в число, которое нужно использовать. Попробуйте следующей схеме:

var TopicSchema = mongoose.Schema({ 
    topicTitle: String, 
    topicDescription: String, 
    topicDateCreated: { 
     type: Date, 
     default: Date.now 
    }, 
    fbId: String, 
    twId: String, 
    location: { 
     type: { 
     type : String 
     }, 
    coordinates: [ ] 
    } 
}); 

Другие примеры вы можете увидеть из этого repo или это answer

+0

mmm Я изменил схему, как вы предлагали, но я все еще получаю ошибку ... – GY22

+0

@ GY22 вы можете предоставить информацию, переданную в код? – vanadium23

+0

это код на стороне клиента: – GY22

0
$("#btnPostTopic").on("click", function(e) 
      { 
       //get the value of the inputfields and textarea 
       var title = $('#TopicTitle').val(); 
       var description = $('#TopicDescription').val(); 
       var LON = parseFloat($('#longitude').val()); 
       var LAT = parseFloat($('#latitude').val()); 

       var coordinates = LON + ", " + LAT; 
       console.log("COORDINATES are " + coordinates); 

       var resultLocalStorageFB = document.getElementById("resultFB"); 
       var resultLocalStorageTW = document.getElementById("resultTW"); 
       resultLocalStorageFB.value = localStorage.getItem("useridfb"); 
       resultLocalStorageTW.value = localStorage.getItem("useridtw"); 
       console.log(resultLocalStorageFB); 
       console.log(resultLocalStorageTW); 

       var FbId = $('#resultFB').val(); 
       var TWId = $('#resultTW').val(); 
       console.log('Fb Id: ' + FbId); 
       console.log('TW Id: ' + TWId); 

       var Point = "Point"; 

       result = { 
        "topicTitle": title, 
        "topicDescription": description, 
        "fbId": FbId, 
        "twId": TWId, 
        "location": { 
         "type": Point, 
         coordinates 
        }  
       }; 
       console.log("Values of inputfield & textarea: " + result); 

       //makes the connection to the server and send the data 
       var socket = io.connect('http://localhost:3001'); 
       socket.emit('sendTopic', result); 
       //console.log("Gets send: " + result); 
      }); 

     }); 
Смежные вопросы