Вернуть ограниченное количество записей определенного типа, но неограниченное количество других записей?
У меня есть запрос, где мне нужно вернуть 10 записей типа «А», а все остальные записи. Как я могу сделать это?
Обновить: По общему признанию, я мог сделать это с двумя запросами, но я хотел избежать этого, если возможно, думая, что это будет меньше накладных расходов и возможно более производительным. Мой запрос уже является запросом агрегации, который учитывает оба вида записей, мне просто нужно ограничить количество записей одного типа в результатах.
Обновить: Ниже приведен пример запроса, который выдвигает на первый план проблему:
db.books.aggregate([
{$geoNear: {near: [-118.09771, 33.89244], distanceField: "distance", spherical: true}},
{$match: {"type": "Fiction"}},
{$project: {
'title': 1,
'author': 1,
'type': 1,
'typeSortOrder':
{$add: [
{$cond: [{$eq: ['$type', "Fiction"]}, 1, 0]},
{$cond: [{$eq: ['$type', "Science"]}, 0, 0]},
{$cond: [{$eq: ['$type', "Horror"]}, 3, 0]}
]},
}},
{$sort: {'typeSortOrder'}},
{$limit: 10}
])
db.books.aggregate([
{$geoNear: {near: [-118.09771, 33.89244], distanceField: "distance", spherical: true}},
{$match: {"type": "Horror"}},
{$project: {
'title': 1,
'author': 1,
'type': 1,
'typeSortOrder':
{$add: [
{$cond: [{$eq: ['$type', "Fiction"]}, 1, 0]},
{$cond: [{$eq: ['$type', "Science"]}, 0, 0]},
{$cond: [{$eq: ['$type', "Horror"]}, 3, 0]}
]},
}},
{$sort: {'typeSortOrder'}},
{$limit: 10}
])
db.books.aggregate([
{$geoNear: {near: [-118.09771, 33.89244], distanceField: "distance", spherical: true}},
{$match: {"type": "Science"}},
{$project: {
'title': 1,
'author': 1,
'type': 1,
'typeSortOrder':
{$add: [
{$cond: [{$eq: ['$type', "Fiction"]}, 1, 0]},
{$cond: [{$eq: ['$type', "Science"]}, 0, 0]},
{$cond: [{$eq: ['$type', "Horror"]}, 3, 0]}
]},
}},
{$sort: {'typeSortOrder'}},
{$limit: 10}
])
Я хотел бы, чтобы все эти записи возвращались в одном запросе, но ограничить тип не более 10 из любой категории. Я понимаю, что typeSortOrder не должен быть условным, когда запросы разбиты, как это, у меня это было там, когда запросы были одним запросом, изначально (именно туда я хотел бы вернуться).