Mongoose CastError при попытке сохранить переменные в GeoJSON Point

Я пытаюсь добавить новых пользователей в базу данных Mongo, включая их местоположение в качестве объекта GeoJSON. Я использую этот пакет для предопределения объекта Point для пользовательской схемы: https://www.npmjs.com/package/mongoose-geojson-schema.

В частности, схема выглядит так:

UserSchema = mongoose.Schema(
    {
        first_name:String,
        last_name:String,
        username:String,
        avatar:String, //string to image location in server / public
        current_user_location: mongoose.Schema.Types.Point
    },
    { collection: 'users' });

var User = mongoose.model('User', UserSchema);

Тогда мой маршрут выглядит так:

var express = require('express');
var router = express.Router();
var User = require('../models/user');
router.post('/addUser', function (req, res) {
        var data = req.body;
        new User({
          first_name:data.first_name,
          last_name:data.last_name,
          username:data.user_name,
          avatar:data.avatar_link, //string to image location in server / public
          current_user_location: {
            type: "Point",
            coordinates: [data.longitude, data.latitude] //[12.123456, 13.134578]
          }
        }).save(function (err) {
            if (err) {
                  console.log(err);
                }
            } else {
                console.log("done");
            }
     });

Затем, когда я использую Postman для отправки тела запроса, он возвращает ошибку

Ошибка преобразования в точку для значения "{type: 'Point', координаты: ['12 .123456 ', '13 .134578']}" по пути "current_user_location"

Вот изображение тела запроса: Postman addUser Request Body

Но когда я меняю значение "координаты" в маршруте на статические координаты (следующий за ним комментарий, [12.123456, 13.134578]) и проверяю маршрут с помощью Postman, я получаю ОК и добавляю нового пользователя. в базу данных.

Есть ли что-то, чего мне не хватает при добавлении значений переменных к объектам GeoJSON внутри тела запроса?


person joelwilsonmt    schedule 06.12.2018    source источник


Ответы (1)


Оказывается, я недостаточно сильно набирал переданные координаты. Схема получала их как строки и выдавала ошибку. Вот как исправить некорректную строку кода:

coordinates: [parseFloat(data.longitude), parseFloat(data.latitude)]

Вы должны преобразовать их в число с плавающей запятой (особенно с данными GeoJSON, потому что спецификация WGS84 говорит, что координаты расширяют 5 десятичных знаков)

person joelwilsonmt    schedule 07.12.2018