zoukankan      html  css  js  c++  java
  • MongoDB 文档间的关系

    文档间可以通过嵌入和引用来建立联系。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})



  • 相关阅读:
    Sql Server中暂停命令
    优化SQL Sever查询语句的几个要点
    SQL Server 常用日期查询语句
    Android开发环境配置
    java实验报告(实验一)
    java实验报告(实验二)
    学习java的一点体会
    [已解决]求助:vs2003用代码实现excel的设置
    关于webform信息提示框
    DataGrid按钮事件的触发
  • 原文地址:https://www.cnblogs.com/yjh1995/p/14164242.html
Copyright © 2011-2022 走看看