Как объединить запрос включения массива с оператором geoNear в агрегатный конвейер? - PullRequest
0 голосов
/ 26 ноября 2018

Это мой вариант использования:

Схема:

const pointSchema = new Schema({
    type: {
        type: String,
        enum: ["Point"]
    },
    coordinates: {
        type: [Number]
    }
});

var Item = newSchema({
    stores: [{ type: Schema.Types.ObjectId, ref: "Store" }],
})

var Store = new Schema({
    location: {
        type: pointSchema
    }
}

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

Я делаю это с помощью этого кода:

Store.aggregate([
    {
      $geoNear: {
        near: {
          type: "Point",
          coordinates: [Number(lng), Number(lat)]
        },
        maxDistance: Number(radius),
        distanceField: "distance",
        spherical: true
      }
    }
  ]);

Я могу получить магазины и затем выполнить запрос по элементам:

Item.find({ stores: { $in: stores }})

Однако элементы не могут быть отсортированыпо расстоянию до ближайшей точки, и я также не могу скопировать поле расстояния из магазинов в поле магазинов элемента.

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