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

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

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

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

3.1 一對一

在MongoDB中可以通過內(nèi)嵌文檔的形式體現(xiàn)出一對一的關(guān)系,比如夫妻:

javascript copyable" lang="JavaScript">{
    name:'黃蓉',
    husband:{
        name:'郭靖'
    }
}
復制代碼

一個文檔對象一旦被嵌入到另一個文檔對象中就絕不可能再被嵌入到其他文檔對象中,因此可以體現(xiàn)出一對一的關(guān)系

3.2 一對多/多對一

一對多的關(guān)系在實際開發(fā)中是非常常用的,也是現(xiàn)實世界中出現(xiàn)頻率比較高的關(guān)系

有兩種方式可以體現(xiàn)一對多(或多對一)的關(guān)系,以客戶和訂單為例:

一:關(guān)系在一的一方維護,直接通過內(nèi)嵌數(shù)組,在數(shù)組中存放整個對象的方式:這種方式不好,因為如果對應的對象比較多的話,文檔就會看起來很復雜,不易查詢

{
    cust_id:ObjectId("5d272c817f2dc9e6986d82fb"),
    cust_name:"黑宋江",
    orders:[
        {
            _id: ObjectId("5d2614c42b1a4fdfd82bfda3"),
            type:"牛肉",
            count:2
        },
        {
            _id:ObjectId("5d272c817f2dc9e6986d82fa"),
            type:"酒",
            count:6
        }
    ]
}
復制代碼

二:一對多,用戶:constom/訂單orders

舉個例子, 比如“用戶-訂單”這個一對多的關(guān)系中, 我們想查詢某一個用戶的所有或者某個訂單, 我們可以在用戶中添加訂單的主鍵

先創(chuàng)建用戶集合

db.constom.insert([
    {username:'孫悟空'},
    {username:'豬八戒'}
])
復制代碼

再創(chuàng)建訂單集合(添加一個userid屬性,該訂單是誰的就給userid屬性添加誰的_id)

db.orders.insert({
    list:["辣椒","花椒","油"],
    userid:ObjectId("5ebcfe39bc5756d0fed31ff3")//這個是孫悟空的_id代表該訂單就是孫悟空的。
})
復制代碼

通過userid再去查找每個人對應的訂單

var userid = db.constom.findOne({username:'孫悟空'})._id;
db.orders.find({userid:userid})
復制代碼

3.3 多對多

在關(guān)系型數(shù)據(jù)庫中我們處理多對多關(guān)系的時候采用的方法一般是將兩張表的主鍵抽取出來,放到一張單獨的關(guān)系表中,將兩張表的主鍵作為這張關(guān)系表的外鍵,每次做關(guān)聯(lián)查詢的時候都要先到這張關(guān)系表中找出對應表的主鍵

在MongoDB中多對多采用的其實是類似與一對多的情況,也是通過增加一些冗余的字段來記錄關(guān)系

舉個例子,我們在關(guān)系型數(shù)據(jù)庫中一般會以學生和老師作為例子,這里同樣我們也舉這個:

//多對多
// 先插入一些老師的信息
db.teachers.insertMany([
    {name:"洪七公"},
    {name:"黃藥師"},
    {name:"龜仙人"}
]);
db.teachers.find();
// 插入一些學生的信息,并且將老師的id進行記錄
db.students.insertMany([
    {
        name:"郭靖",
        teachers_ids:[
        ObjectId("5d7f018b162f56aeed8aedda"),
        ObjectId("5d7f018b162f56aeed8aeddb"),
        ObjectId("5d7f018b162f56aeed8aeddc")
        ]
    },{
        name:"黃蓉",
        teachers_ids:[
        ObjectId("5d7f018b162f56aeed8aedda"),
        ObjectId("5d7f018b162f56aeed8aeddb"),
        ObjectId("5d7f018b162f56aeed8aeddc")
        ]

    }
]);
db.students.find();

作者:是小梁同學呀
鏈接:https://juejin.cn/post/7126746699527094303
來源:稀土掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

TAg

加載中~

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

工信部備案號:湘ICP備19012813號-5