mongodb 是介于关系型与非关系型数据之间的,mongodb的join查询可以通过引用来实现。可以将文档内容嵌入到另一个文档中,也可以将文档内容引用到另一个文档中。嵌入意味着要把某一类型的数据,如包含更多数据的数组,嵌入到文档本身。引用意味着创建一个引用
mongodb 是介于关系型与非关系型数据之间的,mongodb的join查询可以通过引用来实现。 可以将文档内容嵌入到另一个文档中,也可以将文档内容引用到另一个文档中。 嵌入意味着要把某一类型的数据,如包含更多数据的数组,嵌入到文档本身。 引用意味着创建一个引用,包含另一个文档的数据。相当于关系型数据库。 一. 嵌入 例如:我想使用一个关系型数据库来记录CD、DVD和购买信息。在这个数据中,需要一个表来收集CD,另一个表来存储CD歌曲信息。因此,如果要查询特定的信息就可能需要查询多个表的。 对于mongodb 或者其他非关系型数据库,会更容易的嵌入这些信息,采用这种方法会使数据库简洁,确保所有相关信息保存在单一的文档中,同时,检索数据更快。 数据结构如下: 关系型|_media |_cds |_id, artist, title, genre, releasedate |_ cd_tracklists |_cd_id, songtitle, length
|_media |_items |_
[ { "_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" } ] } ]
> 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)
> 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)
> 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" ] }
> 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")) ] } ]
原文地址:mongodb 文档的嵌入和引用, 感谢原作者分享。