Нет результатов с агрегатом $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 это происходит от создания индекса на схеме?

0 ответов

Другие вопросы по тегам