Created
January 23, 2025 12:15
-
-
Save am-MongoDB/2d36bb7377dbb3ab1cb1bdf56c09cb5c to your computer and use it in GitHub Desktop.
See the impact on document size of design decisions on the structure within a document
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This is a playground for MongoDB for VS Code Extension. | |
// It creates 6 collections that each contain 1 document. All 6 collections | |
// contain the same information but with different field names. This is to | |
// demonstrate the different ways that MongoDB can store the same data and what | |
// impact your design decisions have on document size (and therefore how many | |
// documents can fit in the database cache → performance). | |
use('FieldNames'); | |
const schema1 = db.getCollection('schema1'); | |
const schema2 = db.getCollection('schema2'); | |
const schema3 = db.getCollection('schema3'); | |
const schema4 = db.getCollection('schema4'); | |
const schema5 = db.getCollection('schema5'); | |
const schema6 = db.getCollection('schema6'); | |
schema1.drop(); | |
schema2.drop(); | |
schema3.drop(); | |
schema4.drop(); | |
schema5.drop(); | |
schema6.drop(); | |
let doc = {}; | |
for (let outer = 1; outer <= 10; outer++) { | |
for(let middle = 1; middle <= 10; middle++) { | |
for(let inner = 1; inner <= 10; inner++) { | |
doc[`top_level_name_${outer}_middle_level_name_${middle}_bottom_level_name_${inner}`] = (inner % 2 !== 0) ? "Your data goes here" : ""; | |
} | |
} | |
} | |
schema1.insertOne(doc); | |
doc = {}; | |
for (let outer = 1; outer <= 10; outer++) { | |
let middleLevel = {}; | |
for(let middle = 1; middle <= 10; middle++) { | |
let innerLevel = {}; | |
for(let inner = 1; inner <= 10; inner++) { | |
innerLevel[`bottom_level_name_${inner}`] = (inner % 2 !== 0) ? "Your data goes here" : ""; | |
} | |
middleLevel[`middle_level_name_${middle}`] = innerLevel; | |
} | |
doc[`top_level_name_${outer}`] = middleLevel; | |
} | |
schema2.insertOne(doc); | |
doc = {}; | |
for (let outer = 1; outer <= 10; outer++) { | |
let middleLevel = {}; | |
for(let middle = 1; middle <= 10; middle++) { | |
let innerLevel = {}; | |
for(let inner = 1; inner <= 10; inner++) { | |
innerLevel[`bottom_level_name_${inner}`] = (inner % 2 !== 0) ? "Your data goes here" : null; | |
} | |
middleLevel[`middle_level_name_${middle}`] = innerLevel; | |
} | |
doc[`top_level_name_${outer}`] = middleLevel; | |
} | |
schema3.insertOne(doc); | |
doc = {}; | |
for (let outer = 1; outer <= 10; outer++) { | |
let middleLevel = {}; | |
for(let middle = 1; middle <= 10; middle++) { | |
let innerLevel = {}; | |
for(let inner = 1; inner <= 10; inner++) { | |
if (inner % 2 !== 0) { | |
innerLevel[`bottom_level_name_${inner}`] = "Your data goes here"; | |
} | |
} | |
middleLevel[`middle_level_name_${middle}`] = innerLevel; | |
} | |
doc[`top_level_name_${outer}`] = middleLevel; | |
} | |
schema4.insertOne(doc); | |
doc = {}; | |
for (let outer = 1; outer <= 10; outer++) { | |
let middleLevel = {}; | |
for(let middle = 1; middle <= 10; middle++) { | |
let innerLevel = {}; | |
for(let inner = 1; inner <= 10; inner++) { | |
if (inner % 2 !== 0) { | |
innerLevel[`bottomLevelName${inner}`] = "Your data goes here"; | |
} | |
} | |
middleLevel[`middleLevelName${middle}`] = innerLevel; | |
} | |
doc[`topLevelName${outer}`] = middleLevel; | |
} | |
schema5.insertOne(doc); | |
doc = {}; | |
for (let outer = 1; outer <= 10; outer++) { | |
let middleLevel = {}; | |
for(let middle = 1; middle <= 10; middle++) { | |
let innerLevel = {}; | |
for(let inner = 1; inner <= 10; inner++) { | |
if (inner % 2 !== 0) { | |
innerLevel[`c${inner}`] = "Your data goes here"; | |
} | |
} | |
middleLevel[`b${middle}`] = innerLevel; | |
} | |
doc[`a${outer}`] = middleLevel; | |
} | |
schema6.insertOne(doc); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment