iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
Software Development

玩轉 Python 與 MongoDB系列 第 16

玩轉 Python 與 MongoDB_Day16_多對多關係

  • 分享至 

  • xImage
  •  

今天要來介紹在 MongoDB 當中該如何進行多對多關聯的建立,這邊我們會仿造關聯式資料庫的方式,使用第三張表來進行儲存多對多的關聯,這樣的好處是在建立關聯的時候不需要針對主表進行修改,只需要透過第三張表來進行,下方附上本次的關聯圖,另外針對多對多關聯的查詢,由於會使用到較多的 aggregate 的功能,我們會在明天的文章當中進行介紹

資料關聯圖

下方附上範例程式,在這個程式當中,我們先將 author 以及 book 透過 insert_many 進行寫入,接著再透過迴圈的方式,替我們的資料建立關聯,並將 _id 寫入記錄關聯的第三張表

import os
from pathlib import Path
from dotenv import load_dotenv
from pymongo.database import Database
from pymongo.collection import Collection
from pymongo.mongo_client import MongoClient

author_list = [{"name": "Nick"}, {"name": "Andy"}]
book_list = [{"name": "book1"}, {"name": "book2"}]

# 讀取 .env 取得連線資訊
BASE_DIR = Path(__file__).parent.parent
load_dotenv(str(BASE_DIR / ".env"))

# 建立 client 並與 db、collection 進行連線
client = MongoClient(host=os.getenv("MONGODB_ATLAS_URL"))
database = Database(client=client, name="demo")
author_collection = Collection(database=database, name="author")
book_collection = Collection(database=database, name="book")
author_book_relation_collection = Collection(database=database, name="author_book_relation")

# 寫入資料
author_collection.insert_many(author_list)
book_collection.insert_many(book_list)

for author in author_collection.find():
    for book in book_collection.find():
        author_book_relation_collection.insert_one({
            "author_id": author.get("_id"),
            "book_id": book.get("_id")
        })

client.close()

下方的三張圖中可以看到我們成功將資料分別寫入到 author、book 以及 author_book_relation

  • author

    author

  • book

    book

  • author_book_relation

    author_book_relation


上一篇
玩轉 Python 與 MongoDB_Day15_一對一、一對多以及 LookUp
下一篇
# 玩轉 Python 與 MongoDB_Day17_aggregate 聚合基本操作
系列文
玩轉 Python 與 MongoDB30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言