Это классная функция, которую вы ищете! Ничто в понедельник goose не поможет вам с этим из коробки, и выискивать в npm Я тоже не вижу ничего, что помогло бы вам там.
Для ваших двух запросов вы должны сделать что-то вроде этого:
const fancyQuery = async limit => {
const first = await db.users.find({ type: typeToSearch }).limit(20)
let second = [];
if (first.length < limit)
second = await db.users.find({ active: true,
type:{$ne:typeToSearch}} })
.limit(20-first.length)
return [...first, ...second]
}
Единственный другой путь, который я могу придумать, используя api запроса, - это выбрать 40 элементов и затем отфильтровать результаты с помощью javascript. Я думаю, что вам нужно немного изменить запрос, чтобы активная часть запроса не перезапускала все те же документы, что и запрос типа:
db.users.find({
$or: [
{ type: typeToSearch },
{ active: true,
type: {$ne: typeToSearch}
}
]})
.limit(40)
Сначала вы отфильтруете результаты по типу, а затем по не типу и активному до 20 элементов.
Возможно, вы также сможете использовать конвейер агрегации для выполнения sh, но у меня нет такого ответа у меня под рукой Вибронаконечники.