Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kueri agregat MongoDB vs. MySQL SELECT field1 FROM table

Karyawan adalah entitas tunggal; jadi, Anda mungkin tidak ingin membuat model age dari anggota tim yang begitu mendalam dalam struktur departemen dan lokasi dan tim yang kaya. Tidak apa-apa untuk memiliki employees yang terpisah koleksi dan lakukan:

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

Jauh di dalam businesses Anda koleksi yang bisa kamu miliki:

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

Sebagai alternatif, coba ini:

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

OP memiliki pengaturan 10 biz -> 10 loc -> 10 depts -> 10 tim -> 100 emps. 3 pelepasan pertama menciptakan ledakan data 10000x tetapi yang terakhir 100x lebih dari itu. Kita dapat mengecilkan hit dengan menggunakan $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. MySQL ke MS Access

  2. Cara Membuat Database dari Script di MySQL

  3. Dapatkan daftar semua nama kolom dalam tabel yang tidak memiliki NULL sebagai nilai defaultnya?

  4. PHP Apache lumpuh saat menjalankan PROSEDUR TERSIMPAN

  5. Variabel yang ditentukan pengguna MySQL dalam klausa WHERE