MongoDB сочетает поиск с текстовым поиском

Я пытаюсь отфильтровать коллекцию MongoDB с помощью запроса .find() и запустить текстовый поиск результатов, чтобы снизить стоимость запроса, но, похоже, я не могу связать команды.

Вот что я пробовал (не работает):

db.jobs.find({
    "salary.max": {
        $gte: 50000,
        $lte: 120000
    }
}).runCommand("text", {
    search: "metal"
})

Я также пробовал запрос в обратном порядке, что противоречит цели и тоже не работает.

Есть ли способ связать .runCommand() с .find() в MongoDB?


person A.M.K    schedule 02.10.2013    source источник


Ответы (1)


функция .find возвращает DBCursor, у которого нет функции .runCommand. Так что это явно не работает.

Но что действительно работает, так это использование вашего запроса на поиск в команде базы данных text. Как вы можете прочитать в документации по текстовому поиску, вы можете передать filterкак необязательный параметр текстовой команды. Эти фильтрующие документы работают точно так же, как те, которые вы передаете find.

db.jobs.runCommand( "text", { 
    search: "metal",
    filter: { 
        "salary.max": {
            $gte: 50000,
            $lte: 120000
        }
    }
} );
person Philipp    schedule 02.10.2013
comment
Можете ли вы также связать с этим запрос на основе местоположения (2dsphere)? - person A.M.K; 02.10.2013
comment
@AMK Я не вижу причин, по которым это не должно работать. Геопространственные операторы, такие как $nearSphere или $geoWithin, являются обычными операторами-фильтрами, поэтому вы можете добавить их в документ фильтра. И хотя в документации указано, что каждая коллекция может иметь только один текстовый индекс и один географический индекс, нигде не сказано, что она не может иметь ни одного из них. - person Philipp; 02.10.2013
comment
Спасибо. Пока я ждал ответа, я немного поиграл с ElasticSearch, и похоже, что дополнительные проблемы с кодированием переключения будут того стоить. - person A.M.K; 02.10.2013
comment
На кой черт все это нужно? Почему текстовый поиск не является частью find()? - person light24bulbs; 15.01.2014
comment
@light24bulbs Я видел, что вы прокомментировали это. С тех пор я обнаружил, что MongoDB — это фантастическая база данных, но она просто не предназначена для поиска. Настройка Elasticsearch занимает немного (много?) времени, но оно того стоит. - person A.M.K; 16.01.2014
comment
Кажется, это устарело в 2.6. - person Rajiv; 12.12.2014