• 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})



  • 相关阅读:
    链接程序和库
    setjmp.h 文件解析与使用
    程序中的.dll .lib .def 和 .exp文件
    GDB开发测试相关
    gdb调试方法
    gdb代码分析
    ln对目录下所有文件做软链接
    python pexecpt模块 实现自动交互
    vscode中less自动输出为wxss或者css
    cmake
  • 原文地址:https://www.cnblogs.com/yjh1995/p/14164242.html
Copyright © 2020-2023  润新知