Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytania agregujące MongoDB a MySQL SELECT field1 FROM table

Pracownicy to pojedyncze podmioty; dlatego prawdopodobnie nie chcesz modelować age członka zespołu tak głęboko w bogatej strukturze działów, lokalizacji i zespołów. Dobrze jest mieć oddzielnych employees odbiór i po prostu wykonaj:

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

Głęboko w swoich businesses kolekcja, którą możesz mieć:

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

Możesz też spróbować tego:

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

OP ma konfigurację 10 biz -> 10 lokalizacji -> 10 działów -> 10 drużyn -> 100 emps. Pierwsze 3 odwinięcia tworzą 10000-krotną eksplozję danych, ale ostatnia jest 100-krotnie większa. Możemy zmniejszyć trafienie za pomocą $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}}])


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gdzie bezpiecznie przechowywać dane uwierzytelniające bazy danych w witrynie PHP

  2. Niejednoznaczna kolumna w instrukcji INNER JOIN

  3. MySQL - Dlaczego to zapytanie nie używa indeksu (zgodnie z wyjaśnieniem)

  4. Jak powiązać parametry z surowym zapytaniem DB w Laravel, które jest używane w modelu?

  5. Jak znaleźć luki w danych szeregów czasowych w MySQL?