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

#mongodb

#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": [
     {'_id': {'$in': [id=12,id=49]}},
     {}
   ]
}
 

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

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

Комментарии:

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

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

Ответ №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 }
])
 

Игровая площадка