Retornar número limitado de registros de um determinado tipo, mas número ilimitado de outros registros?
Eu tenho uma consulta em que preciso retornar 10 dos registros "Tipo A", enquanto retorna todos os outros registros. Como posso fazer isso?
Atualizar: É certo que eu poderia fazer isso com duas consultas, mas queria evitar que, se possível, pensasse que seria menos caro e possivelmente com melhor desempenho. Minha consulta já é uma consulta de agregação que leva em consideração os dois tipos de registros, só preciso limitar o número de um tipo de registro nos resultados.
Atualizar: A seguir, é apresentado um exemplo de consulta que destaca o problema:
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}
])
Gostaria de ter todos esses registros retornados em uma consulta, mas limite o tipo a no máximo 10 de qualquer categoria. Percebo que o typeSortOrder não precisa ser condicional quando as consultas são divididas dessa maneira, eu o tinha para quando as consultas eram uma consulta, originalmente (que é onde eu gostaria de voltar).