Example 1 — Sample Data
Five products, four user indexes (plus default _id_), then a few queries to generate usage.
db.products.drop()
db.products.insertMany([
{ sku: "A100", name: "Wireless Mouse", category: "Electronics", price: 29, inStock: true },
{ sku: "B200", name: "USB Keyboard", category: "Electronics", price: 49, inStock: true },
{ sku: "C300", name: "Office Chair", category: "Furniture", price: 199, inStock: false },
{ sku: "D400", name: "Desk Lamp", category: "Furniture", price: 35, inStock: true },
{ sku: "E500", name: "Monitor Stand", category: "Electronics", price: 59, inStock: true }
])
db.products.createIndex({ sku: 1 }, { unique: true })
db.products.createIndex({ category: 1 })
db.products.createIndex({ price: -1 })
db.products.createIndex({ inStock: 1, category: 1 }) // rarely queried
// Generate some index usage
db.products.find({ sku: "A100" }).toArray()
db.products.find({ category: "Electronics" }).sort({ price: -1 }).toArray()
db.products.find({ price: { $gte: 50 } }).toArray() How the Data Is Stored in MongoDB
After setup, list indexes with getIndexes():
db.products.getIndexes() Read the important pieces like this:
| Piece | Example | Plain English |
|---|---|---|
sku index | unique | Hit by exact sku lookups |
category / price | single-field | Used by sample finds |
inStock + category | compound | May stay at 0 ops if unused |
How It Works
- Create indexes. Four user indexes plus default
_id_. - Run queries. Those finds bump
access.opson indexes they use. - Leave one idle. The
inStockcompound is never queried on purpose.

