MongoDB进阶
MongoDB 关系与引用
## MongoDB 关系 MongoDB 中的关系表示多个文档之间在逻辑上的相互联系,文档之间可以通过嵌入或引用来建立联系,这种联系可以是 1:1(1对1)、1:N(1对多)、N:1(多对1)、N:N(多对多)。 #### 嵌入式关系 >将所有相关数据都保存在一个文档中的方式,可以使得文档的检索和维护变的更加容易。 ```shell { "_id" : ObjectId("603c8471f2c28d0fdf74ae78"), "phone" : "15011226666", "pincode" : "01-01-1991", "name" : "bianchengbang", "address" : [ { "place" : "22 A, Indiana Apt", "postcode" : 123456, "city" : "Los Angeles", "country" : "California" }, { "place" : "170 A, Acropolis Apt", "postcode" : 456789, "city" : "Chicago", "country" : "Illinois" } ] } ``` #### 引用式关系 >引用式关系是设计数据库时经常用到的方法,这种方法把用户数据文档和用户地址数据文档分开,通过引用文档的 id 字段来建立关系。 ```shell > db.users.findOne({"name":"bianchengbang"},{"address":1}) { "_id" : ObjectId("603c8471f2c28d0fdf74ae78"), "address" : [ { "place" : "22 A, Indiana Apt", "postcode" : 123456, "city" : "Los Angeles", "country" : "California" }, { "place" : "170 A, Acropolis Apt", "postcode" : 456789, "city" : "Chicago", "country" : "Illinois" } ] } ``` ## 数据库引用 >MongoDB 引用有两种:手动引用、DBRefs - DBRef的形式:{ $ref : , $id : , $db : } $ref:集合名称 $id:引用的id $db:数据库名称,可选参数 - 实例 ```shell { "_id":ObjectId("53402597d852426020000002"), "address": { "$ref": "address_home", "$id": ObjectId("534009e4d852427820000002"), "$db": "w3cschoolcc" }, "contact": "987654321", "dob": "01-01-1991", "name": "Tom Benzamin" } ``` 以上实例中用户数据文档使用了 DBRef, 字段 address。 address DBRef 字段指定了引用的地址文档是在 address_home 集合下的 w3cschool 数据库,id 为 534009e4d852427820000002。 以下代码中,我们通过指定 $ref 参数(address_home 集合)来查找集合中指定id的用户地址信息: ```shell >var user = db.users.findOne({"name":"Tom Benzamin"}) >var dbRef = user.address >db[dbRef.$ref].findOne({"_id":(dbRef.$id)}) ``` 以上实例返回了 address_home 集合中的地址数据: ```shell { "_id" : ObjectId("534009e4d852427820000002"), "building" : "22 A, Indiana Apt", "pincode" : 123456, "city" : "Los Angeles", "state" : "California" } ```
顶部
收展
底部
[TOC]
目录
MongoDB 查询分析
MongoDB 关系与引用
MongoDB 原子操作命令
MongoDB ObjectId
MongoDB Map Reduce
MongoDB GridFS
相关推荐
MongoDB教程
PHP操作MongoDB
MongoDB用户及安全
MongoDB优化