2016-12-07 1 views
0

Я пытаюсь использовать следующий запрос в MongoDB.
1) db.products.createIndex ({name: "text", category.name ': "text"})
это создаст Индекс.

2) Теперь мой запрос
db.products.find ({$ текст: {$ поиск: "ВС луна Гобелен"}})
это приведет данные по Солнцу, Луне и гобелен.

3), но я хочу получить данные следующим образом.
          а) сначала все строки данных в матче EXECT ВС луна Гобелен
          б) то после этого солнца, луны и Гобелен появится

(ПРИМЕЧАНИЕ: вызов DB должен быть один раз)

ответ

1

Вы можете использовать соответствующий текстSco повторно сортировать: ResultSet

db.products 
     .find({ $text : { $search : "Sun moon Tapestry" } }, { score: { $meta: 'textScore' } }) 
     .sort({score:{$meta: "textScore"}}) 

Поскольку у вас есть 2 текстовых индексов вы можете также определить веса для name и category.name. https://docs.mongodb.com/v3.2/tutorial/control-results-of-text-search/

PS: Существует связанное ничего angularjs

EDIT: если вы используете Мангуст запрос остается неизменным, то есть для запроса вашей модели

YourProduct 
     .find({ $text : { $search : "Sun moon Tapestry" } }, { score: { $meta: 'textScore' } }) 
     .sort({score:{$meta: "textScore"}}) 
     .exec(function (err, data) { 
      if (err) 
       res.json(err); 
      else { 
       res.json(data) 
      } 
     }); 

Для угловой интеграции вы можете создайте службу, которая использует $ http https://docs.angularjs.org/api/ng/service/$http и сделает ваш вызов ajax.

+0

Это выглядит великолепно и имеет ожидаемые результаты. это работает только в моем терминале. Можете ли вы, пожалуйста, указать в angularjs при отправке запроса, чтобы выразить, чтобы получить результаты. Это действительно впечатляет. –

+0

, пожалуйста, обратитесь к моему правлению. – alfredopacino

+0

Да, я использовал такие же, как это, возможно, я ошибся где-то в моем коде из-за условий продукта в одном вызове БД. он работает в моем терминале, будет следовать ему, когда я решил сложную структуру кода. Еще раз спасибо!!. –

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