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