Невозможно найти индекс для запроса $ geoNear, код: 2, кодовое имя: 'badValue' - PullRequest
0 голосов
/ 30 сентября 2019

Это моя схема

    const UserSchema = new Schema({
    name: {
        type: String,
        required: true
    },
    email: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    skills: [{
        type: String
    }],
    location: {
        type: {
            type: String,
            index: '2dsphere'
        },

        coordinates: []
    }
});

И мой запрос выглядит примерно так

    User.find({
    location: {
        $nearSphere: {
            $geometry: {
                type: "Point",
                coordinates: [77.032448, 28.590654]
            },
            $maxDistance: 2000
        }
    }
   }).find((error, results) => {
    if (error) console.log(error);
    console.log(results);
   });

Всякий раз, когда я запускаю код, я получаю эту ошибку

    ok: 0,
  errmsg:
   'error processing query: ns=StudyJamm.usersTree: GEONEAR  field=location maxdist=2000 isNearSphere=0\nSort: {}\nProj: {}\n planner returned error: unable to find index for $geoNear query',
  code: 2,
  codeName: 'BadValue',
  name: 'MongoError',
  [Symbol(mongoErrorContextSymbol)]: {}

PS: - Я уже попробовал User.index({location: "2dsphere"});

Что я здесь не так делаю? Я перебрал все подобные вопросы о переполнении стека, но у меня нет решения.

1 Ответ

0 голосов
/ 01 октября 2019

Местоположение будет сохранено, как показано ниже, в mongoDB.

location: {
      type: "Point",
      coordinates: [-73.856077, 40.848447]
}

Так что просто проверьте свое определение местоположения снова. Значение type здесь всегда фиксируется как «точка», попробуйте смоделировать это как статическое значение. И указанный вами индекс должен быть на location, а не на type.

Вы можете проверить из БД, существует ли индекс, созданный этим запросом

db.getCollection('data').getIndexes()

Если нет, то возникла проблема с созданием индекса. Я получил ниже код от https://mongoosejs.com/docs/api.html#schematype_SchemaType-index

var s = new Schema({ loc: { type: [Number], index: { type: '2dsphere', sparse: true }})
...