Я использую 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"
}
}}
])
Я хотел бы сделать следующее:
- Запросить текущего пользователя по его _id
- Сохранить как-нибудь его местоположение.
- Получить всех пользователей, чье расстояние от этого местоположения меньше их собственного maxDistance поле
Если возможно, в одномВ запросе я бы хотел избежать двух первых: findById, а затем предыдущего агрегата.
Возможно ли это сделать?