国产三级农村妇女在线,国产精品毛片a∨一区二区三区,国产乱子伦视频大全,国产精品色拉拉,国产欧美日韩一区二区三区,

首頁 > 技術(shù) > 數(shù)據(jù)庫

MongoDB快速上手指南:文檔間的對(duì)應(yīng)關(guān)系一對(duì)一、一對(duì)多、多對(duì)多

數(shù)據(jù)庫 2022-12-07 20:13:59

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)注明出處。

TAg

加載中~

本網(wǎng)站LOGO受版權(quán)及商標(biāo)保護(hù),版權(quán)登記號(hào):國作登字-2022-F-10126915,未經(jīng)湖南木星科技官方許可,嚴(yán)禁使用。
Copyright ? 2012-2022 湖南木星科技有限公司(木星網(wǎng))版權(quán)所有
轉(zhuǎn)載內(nèi)容版權(quán)歸作者及來源網(wǎng)站所有,本站原創(chuàng)內(nèi)容轉(zhuǎn)載請(qǐng)注明來源,商業(yè)媒體及紙媒請(qǐng)先聯(lián)系:aishangyiwan@126.com

工信部備案號(hào):湘ICP備19012813號(hào)-5