小小繼續進行學習,此次學習的內容是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的外鍵。
這樣就完成了對數據庫的外鍵操做。