MongoDB快速上手指南:文檔間的對(duì)應(yīng)關(guān)系一對(duì)一、一對(duì)多、多對(duì)多
3.1 一對(duì)一
在MongoDB中可以通過內(nèi)嵌文檔的形式體現(xiàn)出一對(duì)一的關(guān)系,比如夫妻:
javascript copyable" lang="JavaScript">{
name:'黃蓉',
husband:{
name:'郭靖'
}
}
復(fù)制代碼
一個(gè)文檔對(duì)象一旦被嵌入到另一個(gè)文檔對(duì)象中就絕不可能再被嵌入到其他文檔對(duì)象中,因此可以體現(xiàn)出一對(duì)一的關(guān)系
3.2 一對(duì)多/多對(duì)一
一對(duì)多的關(guān)系在實(shí)際開發(fā)中是非常常用的,也是現(xiàn)實(shí)世界中出現(xiàn)頻率比較高的關(guān)系
有兩種方式可以體現(xiàn)一對(duì)多(或多對(duì)一)的關(guān)系,以客戶和訂單為例:
一:關(guān)系在一的一方維護(hù),直接通過內(nèi)嵌數(shù)組,在數(shù)組中存放整個(gè)對(duì)象的方式:這種方式不好,因?yàn)槿绻麑?duì)應(yīng)的對(duì)象比較多的話,文檔就會(huì)看起來很復(fù)雜,不易查詢
{
cust_id:ObjectId("5d272c817f2dc9e6986d82fb"),
cust_name:"黑宋江",
orders:[
{
_id: ObjectId("5d2614c42b1a4fdfd82bfda3"),
type:"牛肉",
count:2
},
{
_id:ObjectId("5d272c817f2dc9e6986d82fa"),
type:"酒",
count:6
}
]
}
復(fù)制代碼
二:一對(duì)多,用戶:constom/訂單orders
舉個(gè)例子, 比如“用戶-訂單”這個(gè)一對(duì)多的關(guān)系中, 我們想查詢某一個(gè)用戶的所有或者某個(gè)訂單, 我們可以在用戶中添加訂單的主鍵
先創(chuàng)建用戶集合
db.constom.insert([
{username:'孫悟空'},
{username:'豬八戒'}
])
復(fù)制代碼
再創(chuàng)建訂單集合(添加一個(gè)userid屬性,該訂單是誰的就給userid屬性添加誰的_id)
db.orders.insert({
list:["辣椒","花椒","油"],
userid:ObjectId("5ebcfe39bc5756d0fed31ff3")//這個(gè)是孫悟空的_id代表該訂單就是孫悟空的。
})
復(fù)制代碼
通過userid再去查找每個(gè)人對(duì)應(yīng)的訂單
var userid = db.constom.findOne({username:'孫悟空'})._id;
db.orders.find({userid:userid})
復(fù)制代碼
3.3 多對(duì)多
在關(guān)系型數(shù)據(jù)庫中我們處理多對(duì)多關(guān)系的時(shí)候采用的方法一般是將兩張表的主鍵抽取出來,放到一張單獨(dú)的關(guān)系表中,將兩張表的主鍵作為這張關(guān)系表的外鍵,每次做關(guān)聯(lián)查詢的時(shí)候都要先到這張關(guān)系表中找出對(duì)應(yīng)表的主鍵
在MongoDB中多對(duì)多采用的其實(shí)是類似與一對(duì)多
的情況,也是通過增加一些冗余的字段
來記錄關(guān)系
舉個(gè)例子,我們?cè)陉P(guān)系型數(shù)據(jù)庫中一般會(huì)以學(xué)生和老師作為例子,這里同樣我們也舉這個(gè):
//多對(duì)多
// 先插入一些老師的信息
db.teachers.insertMany([
{name:"洪七公"},
{name:"黃藥師"},
{name:"龜仙人"}
]);
db.teachers.find();
// 插入一些學(xué)生的信息,并且將老師的id進(jìn)行記錄
db.students.insertMany([
{
name:"郭靖",
teachers_ids:[
ObjectId("5d7f018b162f56aeed8aedda"),
ObjectId("5d7f018b162f56aeed8aeddb"),
ObjectId("5d7f018b162f56aeed8aeddc")
]
},{
name:"黃蓉",
teachers_ids:[
ObjectId("5d7f018b162f56aeed8aedda"),
ObjectId("5d7f018b162f56aeed8aeddb"),
ObjectId("5d7f018b162f56aeed8aeddc")
]
}
]);
db.students.find();
作者:是小梁同學(xué)呀
鏈接:https://juejin.cn/post/7126746699527094303
來源:稀土掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
版權(quán)聲明:
本站所有文章和圖片均來自用戶分享和網(wǎng)絡(luò)收集,文章和圖片版權(quán)歸原作者及原出處所有,僅供學(xué)習(xí)與參考,請(qǐng)勿用于商業(yè)用途,如果損害了您的權(quán)利,請(qǐng)聯(lián)系網(wǎng)站客服處理。