小小持续进行学习,这次学习的内容是MongoDB外键的根本应用。

示意表关系的办法

在传统的关系型数据库当中,示意表关系,数据是通过索引来欠缺。
而在MongoDB中,示意表关系,应用的是嵌套,即,一个文档嵌套一个文档的办法,作为MongoDB的两个文档的关联,以及应用,reference link作为文档和文档之间的关联。

文档嵌套

应用可视化的

这里应用可视化的编辑器作为文档嵌套
输出以下的文档对象

{    "ming": "ming",        "ming2": {            "ming3": "ming8"        }}

插入胜利当前如下

这样就实现了文档的嵌套,即,示意两个文档之间的关联。

应用JDK

这里应用JDK进行连贯。
首先增加依赖

<dependency>    <groupId>org.mongodb</groupId>    <artifactId>mongodb-driver</artifactId>    <version>3.5.0</version></dependency>

进行连贯

  try{          // 连贯到 mongodb 服务         MongoClient mongoClient = new MongoClient( "106.53.115.12" , 27017 );                // 连贯到数据库         MongoDatabase mongoDatabase = mongoClient.getDatabase("koa");         System.out.println("Connect to database successfully");              }catch(Exception e){        System.err.println( e.getClass().getName() + ": " + e.getMessage() );     }

进行插入

List<Document> collections = new ArrayList<Document>();Document d1 = new Document();d1.append("name", "三国演义").append("author", "罗贯中");Document d2 = new Document();d2.append("name", "红楼梦").append("author", d1);collections.add(d2);c.insertMany(collections);

查问进去的数据如下

{    "name" : "红楼梦",    "author": {        "name": "三国演义",        "author": "罗贯中"    }}

此时就实现了文档的嵌套操作

外键查问

应用js语言,进行查问关联

这里应用new DBRef的形式做外键查问。
此时对于DBRef具备以下字段。

$ref         该$ref字段蕴含援用文档所在的汇合的名称。$id        该$id字段蕴含_id援用文档中字段的值。$db      可选的。蕴含援用文档所在的数据库的名称。只有一些驱动程序反对$db援用,该字段阐明能够跨汇合关联

这里对汇合操作关联如下

// 保留汇合的数据> var a={value:"1"}   > var b={value:"2"}   > var c={value:"9"}   > var d={value:"10"}   > db.A.save(a)   > db.A.save(b)         > db.A.save(c)    > db.A.save(d)   // 进行汇合数据的查问> db.A.find()                                                                                                  { "_id" : ObjectId("4e3f33ab6266b5845052c02b"), "value" : "1" }   { "_id" : ObjectId("4e3f33de6266b5845052c02c"), "value" : "2" }   { "_id" : ObjectId("4e3f33e06266b5845052c02d"), "value" : "9" }   { "_id" : ObjectId("4e3f33e26266b5845052c02e"), "value" : "10" }  

进行汇合关联,这里应用 new DBRef 形式实现汇合的关联

// 通过增加new DBRef 关键字,实现对汇合的关联,这里通过new DBRef作为关键字,其中A为key,ObjectId 为value,进行关联> var Ba={Apid:[new DBRef('A',ObjectId("4e3f33de6266b5845052c02c"))],value:3}                          // 保留汇合> db.B.save(Ba)   > var Ba={Apid:[new DBRef('A',ObjectId("4e3f33de6266b5845052c02c"))],value:4}   > db.B.insert(Ba)                                                               > var Ba={Apid:[new DBRef('A',ObjectId("4e3f33de6266b5845052c02c"))],value:7}   > db.B.insert(Ba)                                                               > var Ba={Apid:[new DBRef('A',ObjectId("4e3f33de6266b5845052c02c"))],value:8}   > db.B.insert(Ba)                                                               // 进行查问> db.B.find()    // 能够看到,曾经胜利关联{ "_id" : ObjectId("4e3f3dd96266b5845052c035"), "Apid" : [ { "$ref" : "A", "$id" : ObjectId("4e3f33de6266b5845052c02c") } ], "value" : 3 }   { "_id" : ObjectId("4e3f3de16266b5845052c036"), "Apid" : [ { "$ref" : "A", "$id" : ObjectId("4e3f33de6266b5845052c02c") } ], "value" : 4 }   { "_id" : ObjectId("4e3f3dec6266b5845052c037"), "Apid" : [ { "$ref" : "A", "$id" : ObjectId("4e3f33de6266b5845052c02c") } ], "value" : 7 }   { "_id" : ObjectId("4e3f3df06266b5845052c038"), "Apid" : [ { "$ref" : "A", "$id" : ObjectId("4e3f33de6266b5845052c02c") } ], "value" : 8 } 

应用mongo-java的形式操作

            // 创立外键进行关联,其中外键为refB            // 其中抉择对db数据库进行操作,抉择id作为数据库的关联            DBRef refB = new DBRef(db,"transations", obj.get("_id"));            // 创立新的汇合            DBObject subObj = new BasicDBObject();            // 外键插入            subObj.put("brand", refB);            // 进行保留            accounts.save(subObj);

查问的后果如下

能够看到其中$id 对应的值为其数据库mongodb的外键。
这样就实现了对数据库的外键操作。

公众号