Mysql
 sql >> база данни >  >> RDS >> Mysql

Агрегирани заявки на MongoDB спрямо MySQL SELECT поле1 ОТ таблицата

Служителите са отделни лица; по този начин вероятно не искате да моделирате age на член на екипа толкова дълбоко в богатата структура на отдели, локации и екипи. Напълно добре е да имате отделни employees събиране и просто направете:

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

Дълбоко във вашия businesses колекция, която можете да имате:

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

Алтернативно, опитайте това:

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

OP има настройка от 10 biz -> 10 loc -> 10 depts -> 10 teams -> 100 emps. Първите 3 размотавания създават 10000x експлозия на данни, но последното е 100x повече от това. Можем да свием попадението, като използваме $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. алтернатива на левещайн

  2. Как може една заявка да умножи 2 клетки за всеки ред MySQL?

  3. Качете CSV в база данни с помощта на php

  4. Разрешения за създаване на тригер в mysql

  5. Вмъкнете в MySQL таблица или актуализирайте, ако съществува