Mon goose Geolocation, Получить продукты, заказанные по местоположению, которое принадлежит другой модели mon goose - PullRequest
3 голосов
/ 25 января 2020

Я создаю приложение менеджера магазина. Здесь пользователь должен иметь возможность запрашивать продукты, используя запрос продуктов. Условием является то, что товары должны быть заказаны по расстоянию до магазина товаров.

Например: если пользователь ищет карандаш, он должен вернуть все товары с именем карандаша, принадлежащие магазинам. в пределах 15 км, и результаты должны быть упорядочены по расстоянию до магазина.

// Модель продукта

const productSchema = new mongoose.Schema({
  name: {
    type: String,
    trim: true,
    required: 'Product name is required'
  },
  store: {
    type: mongoose.Schema.ObjectId,
    ref: 'Store',
    required: 'Store must be connected to the user'
  }
});

// Модель магазина

const storeSchema = new mongoose.Schema({
  name: {
    type: String,
    trim: true,
    required: 'Please enter a store name'
  },
  location: {
    type: {
      type: String,
      default: 'Point'
    },
    coordinates: [{
      type: Number,
      required: 'You must supply coordinates!'
    }]
  },
});

вот как я запрашиваю продукты

  const products = await Product.find({
    name : args.name
    store:{
         near: { type: "Point", coordinates: [ 79.8612, 6.9271] },
         maxDistance: store.maxDistance,
         spherical: true
    }
  });

К сожалению, это дает мне ошибку

CastError: Cast to ObjectId failed for value "{
  near: { type: 'Point', coordinates: [ 79.8612, 6.9271 ] },
  maxDistance: 15,
  spherical: true
}

Я считаю, что я правильно создал индексы

storeSchema.index({
  location: '2dsphere'
});
...