Сортировать запрос mongodb по нескольким полям - PullRequest
0 голосов
/ 25 октября 2018

Я бы хотел отсортировать запрос mongodb для поиска блоггеров.

Здесь структура документа (упрощенная) Blogger:

{
  posts : {
    hashtags : [{
      hashtag : String,
      weight  : Number
    }]
  },
  globalMark : Number
}

Люди могут искать блоггеров с помощью входящего текста,Например: они могут написать «fashion travel» и щелкнуть по кнопке поиска.

В качестве результата я хотел бы показать блоггеров, у которых есть записи, содержащие хэштеги, которые соответствуют / fashion / i и / travel / i, отсортированные поуместность.Релевантность зависит от globalMark и веса хештега.

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

Здесьмой текущий запрос:

Blogger.find({
  "$and" : [{
    "posts.hashtags.hashtag" : {$regex: /fashion/i}
  }, {
    "posts.hashtags.hashtag" : {$regex: /travel/i}
  }]
})
.sort("-globalMark")

Как я могу справиться с этим весом?ОГРОМНОЕ СПАСИБО!

Ответы [ 2 ]

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

Я сделал это, используя агрегацию mongodb и стадию $ project pipe.В основном, $ project позволяет вам изменять результирующий документ, поэтому я использовал его для построения оценки по различным полям, а затем сортировал агрегацию по этой построенной оценке.

Вот документ: https://docs.mongodb.com/manual/reference/operator/aggregation/project/

0 голосов
/ 25 октября 2018

Сначала подумайте: MongoDB не подходит для поиска с оператором like (если ваши данные большие, у вас будет задержка).Во-вторых, подумайте: значение хештега должно быть объектом или объектами в массиве. В-третьих: вы можете использовать

db.collectionName.find({
    $and: [
        {"posts.hashtags.hashtag" : {$regex: /fashion/i}},
        {"posts.hashtags.hashtag" : {$regex: /travel/i}}
    ]
}).sort({
    globalMark: 1, "posts.hashtags.weight": 1
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...