Нет результатов с агрегатом $geoNear
Я использую Mongoose для создания базовой схемы для некоторых данных:
const SuppliersSchema = new mongoose.Schema(
{
name: { type: String, required: true },
location: {
type: {
type: String,
enum: ['Point'],
required: true,
},
coordinates: {
type: [Number],
index: '2dsphere',
required: true
}
},
},
);
SuppliersSchema.index({ location: '2dsphere' });
module.exports = mongoose.model('Suppliers', SuppliersSchema, 'suppliers');
Некоторые тестовые данные выглядят так:
{
"name": "Bobby",
"location": {
"type": "Point",
"coordinates": [
-1.588039,
53.760733
]
}
}
Если я использую обычный find
метод с $near
а также $geometry
, результаты возвращаются, как и ожидалось ✅
Suppliers.find(
{
location: {
$near: {
$geometry: { type: 'Point', coordinates: [req.params.lng, req.params.lat] },
$maxDistance: 5000
}
}
},
data => {
return res.status(200).send({ data });
}
);
Я хочу знать расчетное расстояние каждого supplier
следовательно, используя $geoNear
как часть совокупности. Вот фрагмент кода, который не возвращает никаких данных.
Suppliers.aggregate(
[
{
$geoNear: {
near: {
type: 'Point',
coordinates: [req.params.lng, req.params.lat]
},
spherical: true,
maxDistance: 5 * 1609.34,
distanceField: 'distanceFrom'
}
}
],
data => {
return res.status(200).send({ data });
}
);
Есть идеи, чего мне не хватать? При использовании find
метод, который я ищу явно location
но для $geoNear
это происходит от создания индекса на схеме?