Как $ geoNear выбирает поле модели для поиска координат в MongoDB? - PullRequest
0 голосов
/ 10 мая 2018

Я использую mongoose и пытаюсь получить действия из схемы 'Activity' с помощью специального фильтра, используя $ geoNear, но он всегда возвращает пустой массив, и я думаю, это потому, что агрегатная функция не находит координаты моей модели.

Это пример JSON для отправки:

{
  "coordinates": {
    "lat": 37.3890924,
    "lon": -5.984458899999936
  },
  "distance": 100000000
}

Это запрос:

Activity.aggregate([
            { $geoNear: {
                near: {
                    type: "Point",
                    coordinates: [req.body.coordinates.lon, req.body.coordinates.lat]
                },
                maxDistance: req.body.distance * 1000,
                spherical: true,
                distanceField: "distance"                    
                }
            }
        ])

А это схема, где координаты находятся в поле 'meetingPoint':

const mongoose = require('mongoose');
const mongoosePaginate = require('mongoose-paginate');
const Schema = mongoose.Schema;

var ActivitySchema = Schema({
    title: {type: String, require: true },    
    meetingPoint: {
        meet_name:{type: String, require: true }, 
        coordinates: {
            lat: {type: Number, require: true },
            lon: {type: Number, require: true }
        }
    },
    date: {type: Date, require: true },
    car: Boolean,
    sites: {type: Number, min: 0 },
    price: {type: Number, min: 0.0, require: true },
    description: String,
    eventTime: String,
    event: Boolean,
    sport: {type: Schema.Types.ObjectId, ref: 'Sport', require: true },
    owner: {type: Schema.Types.ObjectId, ref: 'User', require: true },
    attenders: [{type: Schema.Types.ObjectId, ref: 'User'}],
    comments: [{type: Schema.Types.ObjectId, ref: 'Comment'}],
    ratings: [{
        rating:{type: Number},
        user: {type: Schema.Types.ObjectId, ref:'User'}
    }],
    creationDate: {type: Date, default: Date.now, require: true },
    updateDate: {type: Date, default: Date.now, require: true },
    public: Boolean,
    image: String  
});

ActivitySchema.plugin(mongoosePaginate);
ActivitySchema.index({location: "2dsphere"});

module.exports = mongoose.model('Activity', ActivitySchema);

РЕДАКТИРОВАТЬ: я изменил координаты в схеме Мангуста на формат GeoJSON (я думаю), и теперь они выглядят так:

meetingPoint: {
        meet_name:{type: String, require: true }, 
        coordinates: {
            type: String,
            coordinates: []
        }
    }

Но результат тот же.

РЕДАКТИРОВАТЬ2: Я также обновил существующие данные в коллекции в соответствии с MeetingPoint с соответствующим форматом. Это пример:

"_id" : ObjectId("5ac36a2aasdsd3242b"),
"meetingPoint" : { "meet_name" : "Av. de Menéndez Pelayo, 76, 41030 Madrid, España", "coordinates" : { "type" : "Point", "coordinates" : [ -5.984458899
9936, 37.3890924 ] } },
"attenders" :....

Но я все еще не получаю никаких действий с фильтром.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...