2016-02-29 2 views
2

Я создал запрос, который возвращает результаты, содержащие "Be" внутри значения поля. например .:MongoDb: результаты сортировки текстового поиска

db.collection.find({ "$or" : [ { "name.en" : { "$regex" : "Be" } } , { "defaultName" : { "$regex" : "Be" } } ] }) 

Однако возвращаемые результаты сортируются в случайном порядке, некоторые содержат "Be" внутри слова, некоторые в начале, некоторые в конце концов.

Возможно ли создать единый запрос, который будет сортировать результаты следующим образом: первые возвращенные результаты будут начинаться с "Be", а потом это будет все остальное? Результаты

Запрос Пример:

{ 
"defaultName" : "Belgium", 
... 
}, 
{ 
"defaultName" : "Berlin", 
... 
}, 
{ 
"defaultName" : "Bombei", 
... 
}, 
{ 
"defaultName" : "Danube", 
... 
} 

ответ

1

такой подход может быть сделано с помощью рамки aggreagtion

этапы будут:

  1. Match - выбрать элементы сопоставления регулярных выражений

  2. Gro до элементов по выражению, если начинается с регулярным выражением фразы -> правда, еще ложь

  3. сортировать по экспрессии от 2

Что вы думаете?

+0

Звучит как рабочее решение. К сожалению, я пока не вижу другого решения, кроме использования структуры агрегации. Спасибо за ответ. –

+0

Это мое удовольствие :-) – profesor79

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