Я имею сложную базу данных о местоположении со следующей схемой:Mysql для MongoDB и Query Эквивалент этой схемы
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) результаты
- графство 1 (50 результатов)
- графство 2 (55) результаты
- Town 1 (20 результатов) _
- Town 2 (35 результатов)
- State2 (200 результатов) ЭСТ ...
В 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;
** 2d уровень: **
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().
И какой запрос манго будет выполнять эту работу?
Nice ~ Просто, чтобы подтвердить, если у меня есть список из 10 стран, и я хочу, чтобы отобразить дерево с графом для каждых состояний, с одним государством " s дерево развернулось, мне пришлось бы сделать 2 запроса. Один, чтобы получить счет/группу по состоянию, а другой - развернутое дерево, сгруппированное по графству. Я бы также использовал целое число для подсчета/группировки данных, так как оно быстрее, чем соответствие текста. – Ant
Зависит от способа/объема обработки клиента. Вы можете получить все более высокие уровни дерева из одного запроса, чтобы получить подсчеты на самом низком уровне, если вы выполняете сканирование на стороне клиента и суммируете результаты. – wdberkeley