Attribute Pattern
Attribute Pattern: free step-by-step lesson with examples, common mistakes, and interview tips — part of MongoDB Tutorial on Toolliyo Academy.
On this page
MongoDB Tutorial · Lesson 38 of 100
Attribute Pattern
Foundations & CRUD ✓ → Queries & Schema → Aggregation & Scale → Atlas & Projects
Queries & Schema · 2 — Design · ~6 min · MongoDB — Schema Design
What is this?
The attribute pattern stores uncommon or highly variable fields as an array of { k, v } pairs instead of hundreds of sparse named fields. Indexes can target k and v.
Why should you care?
Product catalogs have brand-specific specs — TVs have refreshRate, shoes have sizeUK. Sparse fields waste indexes; attributes keep one flexible shape.
See it live — copy this example
Open mongosh or MongoDB Compass, select database nosqlverse, then run the example. Change one field and run again.
db.products.insertMany([
{
name: "4K TV",
attrs: [
{ k: "refreshHz", v: 120 },
{ k: "sizeIn", v: 55 }
]
},
{
name: "Running Shoes",
attrs: [
{ k: "sizeUK", v: 9 },
{ k: "color", v: "blue" }
]
}
])
db.products.createIndex({ "attrs.k": 1, "attrs.v": 1 })
db.products.find({ attrs: { $elemMatch: { k: "refreshHz", v: { $gte: 100 } } } })
Run Example »
Edit the code below and click Run to see the result in Toolliyo’s live editor.
What happened?
- Both products share attrs[].
- The index supports lookups by key/value.
- $elemMatch finds TVs with refreshHz ≥ 100 without requiring a dedicated refreshHz field on shoes.
Practice next
- Insert the two products.
- Create the attrs index.
- Query shoes with sizeUK 9.
- Find color blue across products.
- Project only name and attrs.
Remember
Store sparse specs as {k,v} arrays. Index attrs.k and attrs.v. Promote hot fields out of attrs.
Amazon-like hardlines catalog
Each category brings new spec keys every quarter.
Outcome: Engineering ships filters on new attrs without ALTER-style migrations.
Interview prep for this lesson
Practice these questions aloud after reading—each links to a full structured answer.
Sign in to ask a question or upvote helpful answers.
No questions yet — be the first to ask!