Skip to content

Instantly share code, notes, and snippets.

@am-MongoDB
Created January 23, 2025 12:15
Show Gist options
  • Save am-MongoDB/2d36bb7377dbb3ab1cb1bdf56c09cb5c to your computer and use it in GitHub Desktop.
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 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