2013-10-02 4 views
3

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

Вот что я пытался (это не работает):

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

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

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

ответ

5

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

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

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

Можете ли вы также связать запрос на основе местоположения (2dsphere) на это? –

+0

@ A.M.K Я не вижу причин, почему это не должно работать. Геопространственные операторы, такие как '$ nearSphere' или' $ geoWithin', являются нормальными операторами фильтров, поэтому вы можете добавить их в свой документ фильтра. И хотя в документации указывается, что каждая коллекция может иметь только * один текстовый индекс * и * один геоиндекс *, он нигде не говорит, что у него не может быть одного из них. – Philipp

+0

Хорошо, спасибо. Пока я ждал ответа, я немного поиграл с ElasticSearch, и похоже, что дополнительные проблемы с кодированием переключения будут стоить того. –

Смежные вопросы