共计 3291 个字符,预计需要花费 9 分钟才能阅读完成。
小小持续进行学习,这次学习的内容是 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 的外键。
这样就实现了对数据库的外键操作。
公众号
正文完