Rumah pangkalan data tutorial mysql mongodb 文档的嵌入和引用

mongodb 文档的嵌入和引用

Jun 07, 2016 pm 04:35 PM
mongodb perhubungan Benamkan sebut harga dokumen

mongodb 是介于关系型与非关系型数据之间的,mongodb的join查询可以通过引用来实现。可以将文档内容嵌入到另一个文档中,也可以将文档内容引用到另一个文档中。嵌入意味着要把某一类型的数据,如包含更多数据的数组,嵌入到文档本身。引用意味着创建一个引用

mongodb 是介于关系型与非关系型数据之间的,mongodb的join查询可以通过引用来实现。 可以将文档内容嵌入到另一个文档中,也可以将文档内容引用到另一个文档中。 嵌入意味着要把某一类型的数据,如包含更多数据的数组,嵌入到文档本身。 引用意味着创建一个引用,包含另一个文档的数据。相当于关系型数据库。 一. 嵌入 例如:我想使用一个关系型数据库来记录CD、DVD和购买信息。在这个数据中,需要一个表来收集CD,另一个表来存储CD歌曲信息。因此,如果要查询特定的信息就可能需要查询多个表的。 对于mongodb 或者其他非关系型数据库,会更容易的嵌入这些信息,采用这种方法会使数据库简洁,确保所有相关信息保存在单一的文档中,同时,检索数据更快。 数据结构如下: 关系型
|_media
	|_cds
		|_id, artist, title, genre, releasedate
	|_ cd_tracklists
		|_cd_id, songtitle, length
Salin selepas log masuk
非关系型
|_media
	|_items
		|_
Salin selepas log masuk
对于非关系型,文档看起来如下所示
[
        {
                "_id" : ObjectId("5353463193efef02c962da73"),
                "Type" : "CD",
                "Artist" : "Nirvana",
                "Title" : "Nevermind",
                "Tracklist" : [
                        {
                                "Track" : "1",
                                "Title" : "Smells like teen spirit",
                                "Length" : "5:02"
                        },
                        {
                                "Track" : "2",
                                "Title" : "In Bloom",
                                "Length" : "4:15"
                        }
                ]
        }
]
Salin selepas log masuk
上面这个例子中,歌曲信息嵌入到文档本身中,在关系型数据库中至少需要两个表,在非关系型数据库中,仅需要一个集合和一个文档。在检索信息时,只需要数据从一个文档加载到内存中,而不必加载多个文档。 二. 引用 在很多场景下,把数据嵌入到文档足以满足很多应用程序,如上所示。然而,有时就需要引用另一个文档。 在mongodb中的文档引用是通过执行额外的查询来解决的。 mongodb提供两种方式来实现:手动引用和使用DBRef标准。 2.1 手动引用 手动引用是最简单最直接的方式。当手动引用数据时,将其他文档的_id值存储在你的文档中。实例如下:
> use ttlsa_com
switched to db ttlsa_com
> apress = ( { "_id" : "Apress", "Type" : "Technical Publisher", "Category" : ["IT", "Software","Programming"] } )
{
        "_id" : "Apress",
        "Type" : "Technical Publisher",
        "Category" : [
                "IT",
                "Software",
                "Programming"
        ]
}
> db.publisherscollection.insert(apress)
Salin selepas log masuk
引用
> book = ( { "Type" : "Book", "Title" : "Definitive Guide to MongoDB, the", "ISBN" : "987-1-4302-3051-9", "Publisher" : "Apress","Author" : ["Membrey,Peter","Plugge, Eelco","Hawkins, Tim"] } )
{
        "Type" : "Book",
        "Title" : "Definitive Guide to MongoDB, the",
        "ISBN" : "987-1-4302-3051-9",
        "Publisher" : "Apress",
        "Author" : [
                "Membrey,Peter",
                "Plugge, Eelco",
                "Hawkins, Tim"
        ]
}
> db.mediaCollection.insert(book)
Salin selepas log masuk
检索
> book = db.mediaCollection.findOne({"ISBN" : "987-1-4302-3051-9"})
{
        "Author" : [
                "Hawkins, Tim",
                "Plugge, Eelco"
        ],
        "ISBN" : "987-1-4302-3051-9",
        "Publisher" : "Apress",
        "Title" : " Different Title 2",
        "Type" : "Book",
        "_id" : ObjectId("5353462f93efef02c962da71")
}
> book.Publisher
Apress
> db.publisherscollection.findOne( { _id : book.Publisher } )
{
        "_id" : "Apress",
        "Type" : "Technical Publisher",
        "Category" : [
                "IT",
                "Software",
                "Programming"
        ]
}
Salin selepas log masuk
2.2?DBRef DBRef提供了一个更正式的规范引用文档之间的数据。 在DBRef中,数据库引用以标准的JSON/ BSON嵌入对象存储的。 语法:?{ $ref : , $id : [, $db : ] } 代表引用的集合的名称。 所引用的文档的_id值。 $ db是可选的,引用的文档所在的数据库的名称。  
> apress = ( { "Type" : "Technical Publisher", "Category" :["IT","Software","Programming"] } )
{
        "Type" : "Technical Publisher",
        "Category" : [
                "IT",
                "Software",
                "Programming"
        ]
}
> db.publisherscollection.save(apress)
> apress
{
        "Type" : "Technical Publisher",
        "Category" : [
                "IT",
                "Software",
                "Programming"
        ],
        "_id" : ObjectId("53588c221697e7511678752c")
}
> book = { "Type" : "Book", "Title" : "Definitive Guide to MongoDB, the", "ISBN" : "987-1-4302-3051-9", "Author": ["Membrey, Peter","Plugge,Eelco","Hawkins, Tim"], Publisher : [ new DBRef ('publisherscollection',apress._id) ] }
{
        "Type" : "Book",
        "Title" : "Definitive Guide to MongoDB, the",
        "ISBN" : "987-1-4302-3051-9",
        "Author" : [
                "Membrey, Peter",
                "Plugge,Eelco",
                "Hawkins, Tim"
        ],
        "Publisher" : [
                DBRef("publisherscollection", ObjectId("53588c221697e7511678752c"))
        ]
}
> db.media.save(book)
> db.media.find().toArray()
[
        {
                "_id" : ObjectId("53588ce01697e7511678752d"),
                "Type" : "Book",
                "Title" : "Definitive Guide to MongoDB, the",
                "ISBN" : "987-1-4302-3051-9",
                "Author" : [
                        "Membrey, Peter",
                        "Plugge,Eelco",
                        "Hawkins, Tim"
                ],
                "Publisher" : [
                        DBRef("publisherscollection", ObjectId("53588c221697e7511678752c"))
                ]
        }
]
Salin selepas log masuk
三. 比较 嵌入 : 小的子文档 数据不经常改变 当最终一致性是可以接受的 文档增长小 经常需要进行二次查询来获取数据 读快 引用 : 大的子文档 非易失性数据 当实时一致性是必要的 文档增长大 经常需要从结果中排除数据 写快
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Perbezaan antara nodejs dan vuejs Perbezaan antara nodejs dan vuejs Apr 21, 2024 am 04:17 AM

Node.js ialah masa jalan JavaScript bahagian pelayan, manakala Vue.js ialah rangka kerja JavaScript sisi klien untuk mencipta antara muka pengguna interaktif. Node.js digunakan untuk pembangunan bahagian pelayan, seperti pembangunan API perkhidmatan belakang dan pemprosesan data, manakala Vue.js digunakan untuk pembangunan sisi klien, seperti aplikasi satu halaman dan antara muka pengguna yang responsif.

Apakah maksud mongodb? Apakah maksud mongodb? Apr 07, 2024 pm 05:57 PM

MongoDB ialah sistem pangkalan data teragih berorientasikan dokumen yang digunakan untuk menyimpan dan mengurus sejumlah besar data berstruktur dan tidak berstruktur. Konsep terasnya termasuk penyimpanan dan pengedaran dokumen, dan ciri utamanya termasuk skema dinamik, pengindeksan, pengagregatan, pengurangan peta dan replikasi. Ia digunakan secara meluas dalam sistem pengurusan kandungan, platform e-dagang, laman web media sosial, aplikasi IoT dan pembangunan aplikasi mudah alih.

Bagaimana untuk membuka mongodb Bagaimana untuk membuka mongodb Apr 07, 2024 pm 06:15 PM

Pada Linux/macOS: Cipta direktori data dan mulakan perkhidmatan "mongod". Pada Windows: Cipta direktori data dan mulakan perkhidmatan MongoDB daripada Pengurus Perkhidmatan. Dalam Docker: Jalankan arahan "docker run". Pada platform lain: Sila rujuk dokumentasi MongoDB. Kaedah pengesahan: Jalankan arahan "mongo" untuk menyambung dan melihat versi pelayan.

Apakah faedah fungsi C++ mengembalikan jenis rujukan? Apakah faedah fungsi C++ mengembalikan jenis rujukan? Apr 20, 2024 pm 09:12 PM

Faedah fungsi mengembalikan jenis rujukan dalam C++ termasuk: Peningkatan prestasi: Melewati rujukan mengelakkan penyalinan objek, sekali gus menjimatkan memori dan masa. Pengubahsuaian langsung: Pemanggil boleh mengubah suai secara langsung objek rujukan yang dikembalikan tanpa menugaskannya semula. Kesederhanaan kod: Lulus melalui rujukan memudahkan kod dan tidak memerlukan operasi penugasan tambahan.

Apa yang perlu dilakukan jika navicat tamat tempoh Apa yang perlu dilakukan jika navicat tamat tempoh Apr 23, 2024 pm 12:12 PM

Penyelesaian untuk menyelesaikan isu tamat tempoh Navicat termasuk: memperbaharui lesen dan menyahpasang semula kemas kini automatik, hubungi Navicat Premium Essentials;

Bagaimana untuk menggunakan rujukan C++ dan lulus parameter penunjuk? Bagaimana untuk menggunakan rujukan C++ dan lulus parameter penunjuk? Apr 12, 2024 pm 10:21 PM

Rujukan dan petunjuk dalam C++ adalah kedua-dua kaedah untuk menghantar parameter fungsi, tetapi terdapat perbezaan. Rujukan ialah alias untuk pembolehubah Mengubah suai rujukan akan mengubah suai pembolehubah asal, manakala penunjuk menyimpan alamat pembolehubah tidak akan mengubah suai pembolehubah asal. Apabila memilih untuk menggunakan rujukan atau penunjuk, anda perlu mempertimbangkan faktor seperti sama ada pembolehubah asal perlu diubah suai, sama ada nilai nol perlu diluluskan dan pertimbangan prestasi.

Adakah sukar untuk mempelajari nodej di bahagian hadapan? Adakah sukar untuk mempelajari nodej di bahagian hadapan? Apr 21, 2024 am 04:57 AM

Untuk pembangun bahagian hadapan, kesukaran mempelajari Node.js bergantung pada asas JavaScript mereka, pengalaman pengaturcaraan sisi pelayan, kebiasaan baris arahan dan gaya pembelajaran. Keluk pembelajaran termasuk modul peringkat permulaan dan peringkat lanjutan yang memfokuskan pada konsep asas, seni bina bahagian pelayan, penyepaduan pangkalan data dan pengaturcaraan tak segerak. Secara keseluruhan, mempelajari Node.js tidak sukar untuk pembangun yang mempunyai asas yang kukuh dalam JavaScript dan bersedia untuk melaburkan masa dan usaha, tetapi bagi mereka yang kurang pengalaman yang berkaitan, mungkin terdapat cabaran tertentu untuk diatasi.

Bagaimana untuk melihat dokumentasi fungsi Golang dalam IDE? Bagaimana untuk melihat dokumentasi fungsi Golang dalam IDE? Apr 18, 2024 pm 03:06 PM

Lihat dokumentasi fungsi Go menggunakan IDE: Tuding kursor pada nama fungsi. Tekan kekunci pintas (GoLand: Ctrl+Q; VSCode: Selepas memasang GoExtensionPack, F1 dan pilih "Go:ShowDocumentation").

See all articles