好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

MongoDB 文档间的关系

1:1 (1对1)

1: N (1对多)

N: 1 (多对1)

N: N (多对多)

嵌入式关系

这种数据结构的缺点是,如果用户和用户地址在不断增加,数据量不断变大,会影响读写性能

文档嵌套的数量和深度没有限制,但MongoDB目前版本限制一个文档最大为16MB

 {
  "name": "Tom",
  "address": [
    {
        "city": "Los Angeles"
    },
    {
        "city": "Chicago"
    }]
}

只需要查询一次

  db. relation. find(
{ "name": "tom"},{ "address": 1, "_id": 0}
)

引用式关系

手动引用

引用式关系是设计数据库时经常用到的方法,这种方法把用户数据文档和用户地址数据文档分开,通过引用文档的 id 字段来建立关系

 {
    "name": "jack",
"address_id":[
  ObjectId( "5fcda6c686463b86f2650f78"), ObjectId( "5fcda6d086463b86f2650f79")
  ]  
}

需要两次查询,第一次查询用户地址的对象id(ObjectId),第二次通过查询的id获取用户的详细地址信息

  var  result = db. relation. findOne({ "name": "jack"},{ "address_id": 1})
db. relation. find({ "_id":{ "$in": result[ "address_id"]}})

DBRefs

DBRef的形式:

 { $ref : , $id : , $db :  } 

三个字段表示的意义为:

$ref:集合名称

$id:引用的id

$db:数据库名称,可选参数

 {
    "name": "hjy",
    "address":{
        "$db": "test1",
        "$ref": "relation",
        "$id": ObjectId( "5fcda6d086463b86f2650f79")
      }
}

DBRef的查询

  var  user = db. hjy. findOne({ "name": "hjy"})
var add = user. address
db[ add. $ref]. findOne({ "_id": add. $id})



MongoDB 文档间的关系

标签:data   use   需要   done   opera   key   tom   增加   数据   

查看更多关于MongoDB 文档间的关系的详细内容...

  阅读:28次