我了解MongoDB的理论和它不支持联接(join)的事实,也知道应该尽可能使用嵌入式文档或去规范化(denormalize),但是我还是有这样的需求:
我有多个文档,比如:
- 用户(Users),其中包含了居住区(Suburbs),但也包括:名(first name)、姓(last name)
- 居住区(Suburbs),其中包含了州(State)
- 孩子(Child),其中包含学校(School),属于一个用户(User),同时也包括:名(first name)、姓(last name)
例如:
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还是Aggregate?
能否指出一种解决方案?
我尝试使用MapReduce,但无法获得包含state_id的用户文档,这就是我在这里提出的原因。