Mysql
 sql >> Database >  >> RDS >> Mysql

Query aggregate MongoDB rispetto a MySQL SELECT field1 FROM table

I dipendenti sono entità singole; quindi, probabilmente non vuoi modellare age di un membro del team così profondamente nella ricca struttura di dipartimenti, sedi e team. Va benissimo avere un employees separato raccolta e fai semplicemente:

db.businesses.aggregate([
{$match: {"age": {$gt: 50} }}
,{$sort: {"age": -1} }
]);

Nel profondo delle tue businesses collezione puoi avere:

{ teams: [ {name: "T1", employees: [ "E1", "E34" ]} ] }

In alternativa, prova questo:

db.businesses.aggregate([ your pipeline] ,{allowDiskUse:true});

L'OP ha una configurazione di 10 biz -> 10 loc -> 10 reparti -> 10 squadre -> 100 emp. I primi 3 svolgimenti creano un'esplosione di dati 10000x, ma l'ultimo è 100x oltre. Possiamo ridurre il risultato usando $filter :

db.businesses.aggregate([
{ $unwind: "$locations" },
{ $unwind: "$locations.departments" },
{ $unwind: "$locations.departments.teams" },

{$project: {
        XX: {$filter: {
                    input: "$locations.departments.teams.employees",
                    as: "z",
                    cond: {$gte: [ "$$z.age", 50] }
            }}
    }}
,{$unwind: "$XX"}
,{$sort: {"XX.age":-1}}])