【发布时间】:2013-12-02 03:23:33
【问题描述】:
我知道 MongoDB 的理论和不支持连接的事实,我应该尽可能使用嵌入文档或非规范化,但这里是:
我有多个文档,例如:
- 用户,嵌入郊区,但也有:名字,姓氏
- 嵌入国家的郊区
- 嵌入 School 的孩子属于一个用户,但也有:名字,姓氏
例子:
Users:
{ _id: 1, first_name: 'Bill', last_name: 'Gates', suburb: 1 }
{ _id: 2, first_name: 'Steve', last_name: 'Jobs', suburb: 3 }
Suburb:
{ _id: 1, name: 'Suburb A', state: 1 }
{ _id: 2, name: 'Suburb B', state: 1 }
{ _id: 3, name: 'Suburb C', state: 3 }
State:
{ _id: 1, name: 'LA' }
{ _id: 3, name: 'NY' }
Child:
{ _id: 1, _user_id: 1, first_name: 'Little Billy', last_name: 'Gates' }
{ _id: 2, _user_id: 2, first_name: 'Little Stevie', last_name: 'Jobs' }
我需要实现的搜索是:
- 用户和孩子的名字、姓氏
- 来自用户的状态
我知道我必须执行多个查询才能完成它,但是如何实现呢?使用 mapReduce 还是聚合?
你能指出一个解决方案吗?
我尝试使用 mapReduce,但这并没有让我从用户那里获得包含 state_id 的文档,所以这就是我在这里提出它的原因。
【问题讨论】:
-
我不会这么说。聚合框架和 map-reduce 的目标是聚合/汇总单个集合内的数据。类似联接的操作应该由应用程序而不是数据库来处理。作为旁注 - 你不想“尽可能地去规范化”。
-
您能否编辑问题以包括您尝试解决问题的步骤?我不确定你卡在哪里了。
-
我并没有真正尝试过。当我看到 mapReduce 没有使用 state_id 填充我的用户文档时,我放弃了继续前进并寻求建议。
标签: mongodb mongodb-query aggregation-framework