Пн goose ошибка нет географических индексов для geoNear - PullRequest
0 голосов
/ 10 января 2020

[! [Введите описание изображения здесь] [1]] [1] Первоначально я разделил его на схемы, но с тех пор удалил их и просто вложил их в мой общий документ. Я попытался поместить индексы на все и удалить их от координат до местоположения. Я думаю, что может быть проблема, потому что точки вложены. Когда я запускаю get Indexes, он показывает, что на location.point есть индекс. Неважно, что это говорит о том, что они не индексы. Я новичок в MERN. Я не уверен, что мне здесь не хватает. Как исправить эту ошибку, чтобы GeoNear нашел индекс во вложенном документе. Как видите, я использую точечную нотацию и добавил индекс.

  user: {
    type: Schema.Types.ObjectId,
    ref: "User"
  },
  published: {
      type: Boolean,
      default: false
  },
  placeType: placeTypeSchema,
  capacity: {
    maxGuestSize: Number,
    rooms: Number
  },
  bathrooms: Number,
  location: {
    streetAddress: String,
    suite: String,
    country: String,
    city: String,
    state: String,
    zip: String,
    point: {
      type: {
        type: String,
        default: "Point",
        index: '2dsphere'
      },
      coordinates: {
        type: [Number],
        index: '2dsphere'
        //index: '2dsphere'
      }
    }
  },
  amenities: {
    regular: [String],
    safety: [String]
  },
  sharedSpaces: [String],
  imageUrl: String,
  description: {
    description: String,
    hostAvailablity: String,
    spaceDetails: String,
    neighborhood: String,
    transportation: String
  },
  title: String,
  mobileNumber: String,
  houseRules: houseRulesSchema,
  preference: {
    rentedLocationBefore: Boolean,
    howOftenGuests: String
  },
  notice: {
    guestNoticeTime: Number,
    checkInTime: Date
  },
  advance: Number,
  lengthOfStay: {
    min: Number,
    max: Number
  },
  price: {
    basePrice: Number,
    minPrice: Number,
    maxPrice: Number
  }
});

SpotSchema.index({"location.point": "2dsphere"});


Spot = mongoose.model('Spot', SpotSchema);
module.exports = Spot; ```
[![enter image description here][2]][2]


  [1]: https://i.stack.imgur.com/2hpSE.png
  [2]: https://i.stack.imgur.com/gevTo.png

1 Ответ

0 голосов
/ 10 января 2020

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

  user: {
    type: Schema.Types.ObjectId,
    ref: "User"
  },
  published: {
      type: Boolean,
      default: false
  },
  placeType: placeTypeSchema,
  capacity: {
    maxGuestSize: Number,
    rooms: Number
  },
  bathrooms: Number,
  location: {
    streetAddress: String,
    suite: String,
    country: String,
    city: String,
    state: String,
    zip: String,
  },
  precise: {
    type: {
      type: String,
      default: "Point"
    },
    coordinates: {
      type: [Number],
      default: [-97.1251805, 33.088988]
      //index: '2dsphere'
    }
  },
  amenities: {
    regular: [String],
    safety: [String]
  },
  sharedSpaces: [String],
  imageUrl: String,
  description: {
    description: String,
    hostAvailablity: String,
    spaceDetails: String,
    neighborhood: String,
    transportation: String
  },
  title: String,
  mobileNumber: String,
  houseRules: houseRulesSchema,
  preference: {
    rentedLocationBefore: Boolean,
    howOftenGuests: String
  },
  notice: {
    guestNoticeTime: Number,
    checkInTime: Date
  },
  advance: Number,
  lengthOfStay: {
    min: Number,
    max: Number
  },
  price: {
    basePrice: Number,
    minPrice: Number,
    maxPrice: Number
  }
});

SpotSchema.index({"precise": "2dsphere"});


Spot = mongoose.model('Spot', SpotSchema);
module.exports = Spot;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...