Сообщение об ошибке при использовании геопространственной индексации через Mongoose - PullRequest
0 голосов
/ 12 октября 2011

Моя схема выглядит следующим образом:

mongoose = require 'mongoose'
ObjectId  = mongoose.Schema.ObjectId

CheckinSchema = new mongoose.Schema
  text:
    type: String, required: true
  location_latLong:
    lat:
      type: Number
    lon:
      type: Number
  location_country:
    type: String
  addedOn:
    type: Date
    default: Date.now

CheckinSchema.index
  location_latLong: '2d'

exports.CheckinSchema = CheckinSchema

Модель генерируется отдельно.Однако я получаю сообщение об ошибке при выполнении запроса.Ошибка:

count fails:{ errmsg: "exception: can't find special index: 2d for: { location_latLong: { $wi...", code: 13038, ok: 0.0 }

Мой запрос:

{ location_latLong: { '$within': { '$box': [[ '-100', '-100' ],[ '100', '100' ]] } } }

Итак, мой вопрос ... что дает?Как правильно выполнить геопространственную индексацию в Mongoose (используя Node.js)

1 Ответ

2 голосов
/ 12 октября 2011

Это потому, что вы указали неправильный порядок в своем географическом индексе, так как mongodb основан на GeoJSON, рекомендуется сначала иметь поле долготы

вместо этого

location_latLong:
    lat:
      type: Number
    lon:
      type: Number

использоватьthis

location_latLong:
    lon:
      type: Number
    lat:
      type: Number

Имена, которые вы назначаете объекту местоположения (lon, lat keys), полностью игнорируются, обнаруживается только упорядочение.

In геопространственная страница mongodb рекомендуется в нескольких местах

По умолчанию в индексе предполагается, что вы индексируете долготу / широту, и поэтому он настроен на диапазон значений [-180..180)

и

Код предполагает, что вы используете десятичные градусы в порядке (долгота, широта).Этот же порядок используется для спецификации GeoJSON.Использование (широта, долгота) приведет к очень неправильным результатам, но часто это порядок, используемый в других местах, поэтому рекомендуется перепроверить.Имена, которые вы назначаете объекту местоположения (если используете объект, а не массив), полностью игнорируются, обнаруживается только упорядочение.

Я уже ответил на это до .

Приветствие

...