Mongodb (мангуст) Рядом с динамическим расположением из документа - PullRequest
0 голосов
/ 09 сентября 2018

Я использую Mongoose и у меня есть список пользователей, у которых есть местоположение и максимальное расстояние:

const userSchema = new mongoose.Schema({
  maxDistance: { type: Number, default: 1000 },
  location: {
    type: {
      type: String,
      enum: ['Point'],
      required: true,
    },
    coordinates: {
      type: [Number],
      required: true,
    },
  },
});

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

Я нашел ответы типа this :

db.collection.aggregate([
    { "$geoNear": {
        "near": {
            "type": "Point",
            // those are raw values, i'd like to get coordinates of a user i'd find by _id
            "coordinates": [ 23.027573, 72.50675800000001 ],
        },
        "distanceField": "distance"
    }},

    { "$redact": {
        "$cond": {
            "if": { "$lte": [ "$distance", "$radius" ] },
            "then": "$$KEEP",
            "else": "$$PRUNE"
        }
    }}
])

Я хотел бы сделать следующее:

  1. Запросить текущего пользователя по его _id
  2. Сохранить как-нибудь его местоположение.
  3. Получить всех пользователей, чье расстояние от этого местоположения меньше их собственного maxDistance поле

Если возможно, в одномВ запросе я бы хотел избежать двух первых: findById, а затем предыдущего агрегата.

Возможно ли это сделать?

...