#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 }
])