Eine begrenzte Anzahl von Datensätzen eines bestimmten Typs, aber eine unbegrenzte Anzahl anderer Datensätze zurückgeben?

Ich habe eine Abfrage, bei der ich 10 "Typ A" -Datensätze und alle anderen Datensätze zurückgeben muss. Wie kann ich das erreichen?

Aktualisieren: Zugegeben, ich könnte dies mit zwei Abfragen tun, aber ich wollte dies nach Möglichkeit vermeiden, da ich dachte, es wäre weniger Overhead und möglicherweise leistungsfähiger. Meine Abfrage ist bereits eine Aggregationsabfrage, die beide Arten von Datensätzen berücksichtigt. Ich muss nur die Anzahl der einen Datensatztypen in den Ergebnissen begrenzen.

Aktualisieren: Das Folgende ist eine Beispielabfrage, die das Problem hervorhebt:

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

Ich möchte, dass alle diese Datensätze in einer Abfrage zurückgegeben werden, beschränke den Typ jedoch auf höchstens 10 einer Kategorie. Mir ist klar, dass typeSortOrder nicht unbedingt bedingt sein muss, wenn die Abfragen wie folgt aufgeteilt werden. Ich hatte es dort, als es sich ursprünglich um eine Abfrage handelte (dorthin möchte ich zurückkehren).

Antworten auf die Frage(4)

Ihre Antwort auf die Frage