本文共 1299 字,大约阅读时间需要 4 分钟。
<\?php
/**
* MongoDB 关系
*/
/**
* MongoDB 的关系表示多个文档之间在逻辑上的相互联系。
* 文档间可以通过嵌入和引用来建立联系。
- MongoDB 中的关系可以是:
- 1:1 (1对1)
- 1: N (1对多)
- N: 1 (多对1)
- N: N (多对多) */
/**
* 实例
*/
/**
* 接下来我们来考虑下用户与用户地址的关系。
* 一个用户可以有多个地址,所以是一对多的关系。
* 以下是 user 文档的简单结构:
- {
- “_id”:ObjectId(“52ffc33cd85242f436000001”),
- “name”: “Tom Hanks”,
- “contact”: “987654321”,
- “dob”: “01-01-1991”
- }
- 以下是 address 文档的简单结构:
- {
- “_id”:ObjectId(“52ffc4a5d85242602e000000”),
- “building”: “22 A, Indiana Apt”,
- “pincode”: 123456,
- “city”: “Los Angeles”,
- “state”: “California”
- }
- 嵌入式关系
- 使用嵌入式方法,我们可以把用户地址嵌入到用户的文档中:
- “_id”:ObjectId(“52ffc33cd85242f436000001”),
- “contact”: “987654321”,
- “dob”: “01-01-1991”,
- “name”: “Tom Benzamin”,
- “address”: [
- {
- “building”: “22 A, Indiana Apt”,
- “pincode”: 123456,
- “city”: “Los Angeles”,
- “state”: “California”
- },
- {
- “building”: “170 A, Acropolis Apt”,
- “pincode”: 456789,
- “city”: “Chicago”,
- “state”: “Illinois”
- }]
- }
- 以上数据保存在单一的文档中,可以比较容易的获取和维护数据。 你可以这样查询用户的地址:
- >db.users.findOne({“name”:”Tom Benzamin”},{“address”:1})
- 这种数据结构的缺点是,如果用户和用户地址在不断增加,数据量不断变大,会影响读写性能。
- 引用式关系
- 引用式关系是设计数据库时经常用到的方法,这种方法把用户数据文档和用户地址数据文档分开,通过引用文档的 id 字段来建立关系。
- {
- “_id”:ObjectId(“52ffc33cd85242f436000001”),
- “contact”: “987654321”,
- “dob”: “01-01-1991”,
- “name”: “Tom Benzamin”,
- “address_ids”: [
- ObjectId(“52ffc4a5d85242602e000000”),
- ObjectId(“52ffc4a5d85242602e000001”)
- ]
- } */
转载地址:http://jxzjz.baihongyu.com/