小小继续进行学习,此次学习的内容是MongoDB外键的基本使用。java
在传统的关系型数据库当中,表示表关系,数据是经过索引来完善。
而在MongoDB中,表示表关系,使用的是嵌套,即,一个文档嵌套一个文档的方法,做为MongoDB的两个文档的关联,以及使用,reference link做为文档和文档之间的关联。mongodb
这里使用可视化的编辑器做为文档嵌套
输入如下的文档对象数据库
{ "ming": "ming", "ming2": { "ming3": "ming8" } }
这样就完成了文档的嵌套,即,表示两个文档之间的关联。koa
这里使用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": "罗贯中" } }
此时就完成了文档的嵌套操做spa
这里使用new DBRef的方式作外键查询。
此时对于DBRef具备如下字段。3d
$ref 该$ref字段包含引用文档所在的集合的名称。 $id 该$id字段包含_id引用文档中字段的值。 $db 可选的。包含引用文档所在的数据库的名称。只有一些驱动程序支持$db引用,该字段说明能够跨集合关联
这里对集合操做关联以下code
// 保存集合的数据 > 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 }
// 建立外键进行关联,其中外键为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的外键。
这样就完成了对数据库的外键操做。