Лучший способ запросить несколько полей в $ geoNear, чем использовать $ или? - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть список событий.Я хотел бы найти в полях title и description определенную фразу и вернуть события в заданном радиусе, соответствующие запросу.

В настоящее время я использую оператор $or, который, кажется, работает,Однако мне интересно, есть ли лучший способ сделать это?Я создал составной текстовый индекс, который использует оба поля;Я просто не уверен, что он действительно привыкнет.

let queryText = /someString/;

return db.collection('events').aggregate([
  {
    $geoNear: {
      near: [lng, lat],
      distanceField: 'distance',
      maxDistance: radius,
      query: {
        $or: [
            {title: queryText},
            {description: queryText}
        ]
      },
      spherical: true
    }
  }
]).toArray();

1 Ответ

0 голосов
/ 29 ноября 2018

Вы можете включить свой запрос в другой аргумент (помните, что $ geoNear всегда должен быть сверху), например:

let queryText = /someString/;
return db.collection('events').aggregate([
    {
        $geoNear: {
            near: [lng, lat],
            distanceField: 'distance',
            maxDistance: radius,
            spherical: true
        },
    {
        $match: {
            $or: [
                {title: queryText},
                {description: queryText}
            ]
        }
    }
]).toArray();

Все время, когда я использую этот способ, я никогда не пробовал свой путь раньше.

...