Это мой вариант использования:
Схема:
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 }})
Однако элементы не могут быть отсортированыпо расстоянию до ближайшей точки, и я также не могу скопировать поле расстояния из магазинов в поле магазинов элемента.