У меня есть сложная база данных местоположений со следующей схемой:
table States
id : INT PK AutoIncrement
name : VarChar 50 UNIQUE
table Counties
id: INT PK AutoIncrement
stateID : INT ForeignKey ->States(id)
name : VARCHAR(50)
table Towns :
id: INT PK AutoIncrement
stateID : INT ForeignKey ->States(id)
countyID : INT ForeignKey ->Counties(id)
name : VARCHAR(50)
table listings
id : INT PK autoincrement
name: varchar(50)
stateID: INT
countyID: INT
townID: INT
Когда я хочу отобразить некоторые статистические данные о географическом перераспределении в виде дерева, например:
- state1 (105 results)
- county 1 (50 results)
- county 2 (55 results)
- Town 1 ( 20 results)_
- Город 2 ( 35 результатов)
- state2 (200 результатов) ect...
В mySQL я бы сделал такие запросы:
**1-й уровень: **
select count(*) as nb, S.namem, S.id as stateID from listings L INNER JOIN States S ON S.id=L.stateID GROUP BY S.id;
**2-й уровень: **
foreach(results as $result){
$sql = "select count(*) as nb, from listings L INNER JOIN Counties C ON C.id=L.countyID WHERE L.stateID=".$result['stateID'];
});
и так далее... В MySQL тоже есть способ сделать это в уникальном длинном запросе.
Это тривиальный запрос, и он очень быстро выполняется на SSD-диске в Mysql.
Я начинаю изучать mongoDB и хочу знать, какую схему мне следует использовать для хранения данных о моем местоположении, чтобы оптимизировать операции $count() и $group().
И какой запрос монго выполнит эту работу?