Я искал повсюду, и я не мог найти подходящего источника для проблемы, которую мне нужно решить.
учитывая данные записи, мне нужно отдать приоритет некоторым документам по сравнению с другими, когда я запрашиваю все.
например: скажем, я делаю этот поиск
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]}},
{}
]
}
Но я не думаю, что это правильный способ сделать это, и он не работает.
Любая помощь будет принята с благодарностью
Я знаю о пропуске, это не то, чего я хочу. В основном я хочу получить все документы без какой-либо фильтрации (в пределах ограничения пейджера), но убедиться, что некоторые значения будут на первой странице (например, отсортировать их до первой страницы)
Вы можете использовать метод 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 }
])
Это вернет только 12, 49, и я все еще хочу получить остальные (заполните массив до предела пейджера)