Ищете правильный способ расставить приоритеты для определенных документов в запросе Mongodb

Я искал повсюду, и я не мог найти подходящего источника для проблемы, которую мне нужно решить.

учитывая данные записи, мне нужно отдать приоритет некоторым документам по сравнению с другими, когда я запрашиваю все.

например: скажем, я делаю этот поиск

db.users.find().limit(10)

и в моем документе есть данные с id = 1,2,3,....50;

как я могу сначала установить приоритет запроса id = 12 или id = 49?

что я хотел бы получить обратно:

array({id=12}, {id=49} ... fill the rest until pager limit)

Я пробовал использовать $or вот так:

{
   "$or": [
     {'_id': {'$in': [id=12,id=49]}},
     {}
   ]
}

Но я не думаю, что это правильный способ сделать это, и он не работает.

Любая помощь будет принята с благодарностью

Это вернет только 12, 49, и я все еще хочу получить остальные (заполните массив до предела пейджера)

Yoni hodeffi 20.12.2020 13:37

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

Yoni hodeffi 20.12.2020 13:41
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
1
2
148
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать метод aggregate() ,

  • $addFields чтобы добавить новые поля для целей сортировки hasId, проверьте условие, если ваше поле _id в ваших входных идентификаторах, затем верните 1, иначе удалите поле
  • $sort по hasId в порядке убывания
  • $limit документы
db.collection.aggregate([
  {
    $addFields: {
      hasId: {
        $cond: [
          { $in: ["$_id", [8, 5]] },
          1,
          "$$REMOVE"
        ]
      }
    }
  },
  { $sort: { hasId: -1 } },
  { $limit: 5 }
])

Детская площадка

Другие вопросы по теме