

{"id":13746,"date":"2018-04-29T11:00:02","date_gmt":"2018-04-29T11:00:02","guid":{"rendered":"https:\/\/data-flair.training\/blogs\/?p=13746"},"modified":"2021-05-09T13:07:31","modified_gmt":"2021-05-09T07:37:31","slug":"mongodb-data-modeling","status":"publish","type":"post","link":"https:\/\/data-flair.training\/blogs\/mongodb-data-modeling\/","title":{"rendered":"MongoDB Data Modeling with Document Structure"},"content":{"rendered":"<p>We have seen the<strong> environment setup for MongoDB<\/strong> in our last <strong>MongoDB Tutorial<\/strong>. Here, in this article, we will learn the<em><strong> MongoDB Data Modeling<\/strong><\/em>. In addition, we will also discuss the MongoDB Document Structure and some considerations of MongoDB data modeling.<\/p>\n<p>So, let&#8217;s start with MongoDB Data Modeling.<\/p>\n<h2>What is MongoDB Data Modeling?<\/h2>\n<ul>\n<li>We know that MongoDB is a document-oriented database or NoSQL database.<\/li>\n<li>It is a schema-less database or we can say, it has a flexible schema.<\/li>\n<li>Unlike the structured database, where we need to determine table\u2019s schema in advance, MongoDB is very flexible in this area.<\/li>\n<li>MongoDB deals in collections, documents, and fields.<\/li>\n<li>We can have documents containing different sets of fields or structures in the same collection.<\/li>\n<li>Also, common fields in a collection can contain different types of data. This helps in easy mapping.<\/li>\n<\/ul>\n<p>The key challenge in MongoDB data modeling is balancing the requirements of the application. Also, we need to assure the performance aspect effectively while modeling. Let\u2019s point out some requirements while MongoDB Data Modeling taking place.<\/p>\n<ol>\n<li>Design schema according to the need.<\/li>\n<li>Objects which are queried together should be contained in one document.<\/li>\n<li>Consider the frequent use cases.<\/li>\n<li>Do complex aggregation in the schema.<\/li>\n<\/ol>\n<h2>MongoDB Document Structure<\/h2>\n<p>There can be two ways to establish relationships between the data in MongoDB:<\/p>\n<ul>\n<li><strong>Referenced Documents<\/strong><\/li>\n<li><strong>Embedded Documents<\/strong><\/li>\n<\/ul>\n<div id=\"attachment_13751\" style=\"width: 567px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/er_model_intro.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-13751\" class=\"wp-image-13751 size-full\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/er_model_intro.png\" alt=\"MongoDB Data Modelling\" width=\"557\" height=\"152\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/er_model_intro.png 557w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/er_model_intro-150x41.png 150w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/er_model_intro-300x82.png 300w\" sizes=\"auto, (max-width: 557px) 100vw, 557px\" \/><\/a><p id=\"caption-attachment-13751\" class=\"wp-caption-text\">MongoDB Document Structure<\/p><\/div>\n<h3>a. Referenced Documents<\/h3>\n<p>Reference is one of the tools that store the relationship between data by including links from one data to another. In such data, a reference to the data of one collection will be used to collect the data between the collections.<\/p>\n<p>We can say, applications resolve these references to access the related data. These are normalized data models.<\/p>\n<p>Reference relationships should be used to establish one to many or many to many relationships between documents. Also, when the referenced entities\u00a0are frequently updated or grow indefinitely.<\/p>\n<div id=\"attachment_14563\" style=\"width: 789px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Referenced-data-1.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-14563\" class=\"wp-image-14563 size-full\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Referenced-data-1.png\" alt=\"MongoDB Document Structure\" width=\"779\" height=\"449\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Referenced-data-1.png 779w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Referenced-data-1-150x86.png 150w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Referenced-data-1-300x173.png 300w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Referenced-data-1-768x443.png 768w\" sizes=\"auto, (max-width: 779px) 100vw, 779px\" \/><\/a><p id=\"caption-attachment-14563\" class=\"wp-caption-text\">MongoDB Document Structure &#8211; Reference Document<\/p><\/div>\n<h3>b. Embedded Documents<\/h3>\n<p>These can be considered as de-normalized data models. As the name suggests, embedded documents create relationships between data by storing related data in a single document structure. These data models allow applications to retrieve and manipulate related data in a single database operation.<\/p>\n<p>Embedded documents should be considered when the embedded entity is an integral part of the document and not updated frequently. It should be used when there is a contained relation between entities and they should not grow indefinitely.<\/p>\n<div id=\"attachment_14564\" style=\"width: 764px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/embedded.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-14564\" class=\"wp-image-14564 size-full\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/embedded.png\" alt=\"MongoDB Document Structure\" width=\"754\" height=\"427\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/embedded.png 754w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/embedded-150x85.png 150w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/embedded-300x170.png 300w\" sizes=\"auto, (max-width: 754px) 100vw, 754px\" \/><\/a><p id=\"caption-attachment-14564\" class=\"wp-caption-text\">MongoDB Document Structure &#8211; Embedded Documents<\/p><\/div>\n<h2>Considerations for MongoDB Data Modeling<\/h2>\n<p>Some special consideration should give while designing a data model of MongoDB. This is for high per performance scalable and efficient database. The following aspects should consider for MongoDB Data Modeling.<\/p>\n<h3>a. Data Usage<\/h3>\n<p>While designing a data model, one must consider that how applications will access the database. Also, what will be the pattern of data, such as reading, writing, updating, and deletion of data. Some applications are read centric and some are write-centric.<\/p>\n<p>There are possibilities that some data use frequently whereas some data is completely static. We should consider these patterns while designing the schema.<\/p>\n<h3>b. Document growth<\/h3>\n<p>Some updates increase the size of the documents. During initialization, MongoDB assigns a fixed document size. While using embedded documents, we must analyze if the subobject can grow further out of bounds.<\/p>\n<p>Otherwise, there may occur performance degradation when the size of the document crosses its limit. MongoDB relocates the document on disk if the document size exceeds the allocated space for that document.<\/p>\n<h3>c.\u00a0 Atomicity<\/h3>\n<p>Atomicity in contrast to the database means operations must fail or succeed as a single unit. If a parent transaction has many sub-operations, it will fail even if a single operation fails. Operations in MongoDB happen at the document level.<\/p>\n<p>No single write operation can affect more than one collection. Even if it tries to affect multiple collections, these will treat as separate operations. A single write operation can insert or update the data for an entity. Hence, this facilitates atomic write operations.<\/p>\n<p>However, schemas that provide atomicity in write operations may limit the applications to use the data. It may also limit the ways to modify applications. This consideration describes the challenge that comes in a way of data modeling for flexibility.<\/p>\n<p>This was all\u00a0about MongoDB Data Modeling Tutorial. Hope you like our explanation<b><\/b>.<\/p>\n<h2>Conclusion<\/h2>\n<p>Hence, now we are familiar with the MongoDB Data Modeling. We have seen how can we model the data in MongoDB without degrading its performance. Moreover, we saw MongoDB Document Structure: Reference and Embedded Documents.<\/p>\n<p>At last, we discuss some important considerations for MongoDB Data Modeling. Furthermore, if you have any query, feel free to ask in a comment section.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We have seen the environment setup for MongoDB in our last MongoDB Tutorial. Here, in this article, we will learn the MongoDB Data Modeling. In addition, we will also discuss the MongoDB Document Structure&#46;&#46;&#46;<\/p>\n","protected":false},"author":6,"featured_media":17025,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[38],"tags":[4024,4130,8805,8806,8811,8819,8847,11463],"class_list":["post-13746","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mongodb","tag-document-structure-in-mongodb","tag-embedded-documents","tag-mongodb-data-model","tag-mongodb-data-model-example","tag-mongodb-document-structure","tag-mongodb-embedded-documents","tag-mongodb-reference-document","tag-referenced-documents"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>MongoDB Data Modeling with Document Structure - DataFlair<\/title>\n<meta name=\"description\" content=\"MongoDB Data Modeling Tutorial- what is Data Modeling in MongoDB,Document Structure, Referenced &amp; Embedded Document,Considerations for MongoDB Data Modeling\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/data-flair.training\/blogs\/mongodb-data-modeling\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MongoDB Data Modeling with Document Structure - DataFlair\" \/>\n<meta property=\"og:description\" content=\"MongoDB Data Modeling Tutorial- what is Data Modeling in MongoDB,Document Structure, Referenced &amp; Embedded Document,Considerations for MongoDB Data Modeling\" \/>\n<meta property=\"og:url\" content=\"https:\/\/data-flair.training\/blogs\/mongodb-data-modeling\/\" \/>\n<meta property=\"og:site_name\" content=\"DataFlair\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DataFlairWS\/\" \/>\n<meta property=\"article:published_time\" content=\"2018-04-29T11:00:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-05-09T07:37:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/MongoDB-Data-Modelling-01.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"DataFlair Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:site\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"DataFlair Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"MongoDB Data Modeling with Document Structure - DataFlair","description":"MongoDB Data Modeling Tutorial- what is Data Modeling in MongoDB,Document Structure, Referenced & Embedded Document,Considerations for MongoDB Data Modeling","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/data-flair.training\/blogs\/mongodb-data-modeling\/","og_locale":"en_US","og_type":"article","og_title":"MongoDB Data Modeling with Document Structure - DataFlair","og_description":"MongoDB Data Modeling Tutorial- what is Data Modeling in MongoDB,Document Structure, Referenced & Embedded Document,Considerations for MongoDB Data Modeling","og_url":"https:\/\/data-flair.training\/blogs\/mongodb-data-modeling\/","og_site_name":"DataFlair","article_publisher":"https:\/\/www.facebook.com\/DataFlairWS\/","article_published_time":"2018-04-29T11:00:02+00:00","article_modified_time":"2021-05-09T07:37:31+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/MongoDB-Data-Modelling-01.jpg","type":"image\/jpeg"}],"author":"DataFlair Team","twitter_card":"summary_large_image","twitter_creator":"@DataFlairWS","twitter_site":"@DataFlairWS","twitter_misc":{"Written by":"DataFlair Team","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/data-flair.training\/blogs\/mongodb-data-modeling\/#article","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/mongodb-data-modeling\/"},"author":{"name":"DataFlair Team","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/2c58ecb4f73a39f0ef993f1ddfcd7b89"},"headline":"MongoDB Data Modeling with Document Structure","datePublished":"2018-04-29T11:00:02+00:00","dateModified":"2021-05-09T07:37:31+00:00","mainEntityOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/mongodb-data-modeling\/"},"wordCount":808,"commentCount":0,"publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/mongodb-data-modeling\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/MongoDB-Data-Modelling-01.jpg","keywords":["Document Structure in MongoDB","Embedded Documents","MongoDB Data Model","MongoDB Data Model example","MongoDB Document Structure","MongoDb Embedded Documents","MongoDB Reference Document","Referenced Documents"],"articleSection":["MongoDB Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/data-flair.training\/blogs\/mongodb-data-modeling\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/data-flair.training\/blogs\/mongodb-data-modeling\/","url":"https:\/\/data-flair.training\/blogs\/mongodb-data-modeling\/","name":"MongoDB Data Modeling with Document Structure - DataFlair","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/#website"},"primaryImageOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/mongodb-data-modeling\/#primaryimage"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/mongodb-data-modeling\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/MongoDB-Data-Modelling-01.jpg","datePublished":"2018-04-29T11:00:02+00:00","dateModified":"2021-05-09T07:37:31+00:00","description":"MongoDB Data Modeling Tutorial- what is Data Modeling in MongoDB,Document Structure, Referenced & Embedded Document,Considerations for MongoDB Data Modeling","breadcrumb":{"@id":"https:\/\/data-flair.training\/blogs\/mongodb-data-modeling\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/data-flair.training\/blogs\/mongodb-data-modeling\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/mongodb-data-modeling\/#primaryimage","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/MongoDB-Data-Modelling-01.jpg","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/MongoDB-Data-Modelling-01.jpg","width":1200,"height":628,"caption":"MongoDB Data Modeling with Document Structure"},{"@type":"BreadcrumbList","@id":"https:\/\/data-flair.training\/blogs\/mongodb-data-modeling\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog Home","item":"https:\/\/data-flair.training\/blogs\/"},{"@type":"ListItem","position":2,"name":"MongoDB Tutorials","item":"https:\/\/data-flair.training\/blogs\/category\/mongodb\/"},{"@type":"ListItem","position":3,"name":"MongoDB Data Modeling with Document Structure"}]},{"@type":"WebSite","@id":"https:\/\/data-flair.training\/blogs\/#website","url":"https:\/\/data-flair.training\/blogs\/","name":"DataFlair","description":"Learn Today. Lead Tomorrow.","publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/data-flair.training\/blogs\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/data-flair.training\/blogs\/#organization","name":"DataFlair","url":"https:\/\/data-flair.training\/blogs\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","width":106,"height":48,"caption":"DataFlair"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DataFlairWS\/","https:\/\/x.com\/DataFlairWS","https:\/\/www.linkedin.com\/company\/dataflair-web-services-pvt-ltd\/","https:\/\/www.youtube.com\/user\/DataFlairWS"]},{"@type":"Person","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/2c58ecb4f73a39f0ef993f1ddfcd7b89","name":"DataFlair Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/1ce4a0e3e542444fc73bbebf83e89e8b73e2d95ccb1fcee64da9945f078b97c5?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1ce4a0e3e542444fc73bbebf83e89e8b73e2d95ccb1fcee64da9945f078b97c5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1ce4a0e3e542444fc73bbebf83e89e8b73e2d95ccb1fcee64da9945f078b97c5?s=96&d=mm&r=g","caption":"DataFlair Team"},"description":"The DataFlair Team provides industry-driven content on programming, Java, Python, C++, DSA, AI, ML, data Science, Android, Flutter, MERN, Web Development, and technology. Our expert educators focus on delivering value-packed, easy-to-follow resources for tech enthusiasts and professionals.","url":"https:\/\/data-flair.training\/blogs\/author\/dfteam2\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/13746","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/comments?post=13746"}],"version-history":[{"count":6,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/13746\/revisions"}],"predecessor-version":[{"id":92948,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/13746\/revisions\/92948"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media\/17025"}],"wp:attachment":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media?parent=13746"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/categories?post=13746"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/tags?post=13746"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}