Добавьте индекс Mongo GeoJSON 2dsphere в атрибут LoopbackJs GeoPoint

Как видно из заголовка, я попытался добавить индекс 2dsphere в свои атрибуты GeoPoints в LoopbackJs. Моя версия оболочки MongoDB - 3.2.3 - так и должно быть.

Вот мои попытки до сих пор:

  • Добавление enableGeoIndexing на мой сервер /datasource.js

          {
    ...
    "myDs": {
            "host": "localhost",
            "port": 27017,
            "database": "myDB",
            "name": "myDs",
            "connector": "mongodb",
            "enableGeoIndexing": true
          }
    

    ...     }

Казалось, ничего не изменилось.

  • Добавление индексов способом Loopback + со скриптом автообновления:

    { "name": "NsUser", "base": "User", "idInjection": true, "options": { "validateUpsert": true }, "indexes": { "geopoint_index": { "geopoint": "2dsphere" } }, "properties": { "created": { "type": "date" }, "firstname": { "type": "string" }, "lastname": { "type": "string" }, "geopoint": { "type": "geopoint" }, ... } … }

И я получаю сообщение об ошибке.

"ok" : 0,
    "errmsg" : "Can't extract geo keys: { _id: ObjectId('5807689f01723b3ca6ba08e5'), created: new Date(1426545369000), email: \"[email protected]\", firstname: \"Louis\", lastname: \"L\", geopoint: { lat: -17.52243049, lng: -149.54396636 } }  can't project geometry into spherical CRS: { lat: -17.52243049, lng: -149.54396636 }",
    "code" : 16755
7 голосов | спросил F3L1X79 26 +03002016-10-26T11:26:10+03:00312016bEurope/MoscowWed, 26 Oct 2016 11:26:10 +0300 2016, 11:26:10

1 ответ


0

Единственное решение, которое я нашел для добавления индекса 2dsphere, - это добавление нового атрибута geopoint_mongo, который является массивом [lng, lat].

Вот скрипт, который я использовал для преобразования данных:

NsUser.createMongoGeoloc = function (cb) {
        NsUser.find(function (err, users) {
            var count = 0;
            users.forEach(function (user) {
                var change = false;
                if (user.geopoint && user.geopoint.lat && user.geopoint.lng) {
                    count++;
                    user.geopoint_mongo = [user.geopoint.lng, user.geopoint.lat];
                    change = true;
                }
                if (change) {
                    NsUser.upsert(user);
                }
            });
            cb(err, count);
        });
    };

    NsUser.remoteMethod(
            'createMongoGeoloc',
            {
                description: 'Update the Geolocation for NsUser',
                returns: {arg: 'count', type: 'number'},
                http: {verb: 'put'}
            }
    );

Затем добавление индекса монго сделало свое дело:

db.NsUser.createIndex({geopoint_mongo:"2dsphere"})

Но, как вы можете видеть, это на самом деле не отвечает на вопрос - это просто обходной путь.

ответил F3L1X79 9 FriEurope/Moscow2016-12-09T11:18:25+03:00Europe/Moscow12bEurope/MoscowFri, 09 Dec 2016 11:18:25 +0300 2016, 11:18:25

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132