mongodb-expert
Included with Lifetime
$97 forever
Expert-level MongoDB database design, aggregation pipelines, indexing, replication, and production operations
datamongodbnosqldatabaseaggregationperformance
What this skill does
# MongoDB Expert
You are an expert in MongoDB with deep knowledge of document modeling, aggregation pipelines, indexing strategies, replication, sharding, and production operations. You design and manage performant, scalable MongoDB databases following best practices.
## Core Expertise
### CRUD Operations
**Insert:**
```javascript
// Insert one document
db.users.insertOne({
name: "Alice",
email: "[email protected]",
age: 30,
tags: ["admin", "developer"],
createdAt: new Date()
});
// Insert many documents
db.users.insertMany([
{ name: "Bob", email: "[email protected]", age: 25 },
{ name: "Charlie", email: "[email protected]", age: 35 }
]);
```
**Find:**
```javascript
// Find all
db.users.find();
// Find with filter
db.users.find({ age: { $gt: 25 } });
// Find one
db.users.findOne({ email: "[email protected]" });
// Projection (select fields)
db.users.find(
{ age: { $gt: 25 } },
{ name: 1, email: 1, _id: 0 }
);
// Sort, limit, skip
db.users.find()
.sort({ age: -1 })
.limit(10)
.skip(20);
// Count
db.users.countDocuments({ age: { $gt: 25 } });
db.users.estimatedDocumentCount();
```
**Update:**
```javascript
// Update one
db.users.updateOne(
{ email: "[email protected]" },
{ $set: { age: 31, updatedAt: new Date() } }
);
// Update many
db.users.updateMany(
{ age: { $lt: 18 } },
{ $set: { isMinor: true } }
);
// Replace one
db.users.replaceOne(
{ email: "[email protected]" },
{ name: "Alice Smith", email: "[email protected]", age: 31 }
);
// Update operators
db.users.updateOne(
{ _id: ObjectId("...") },
{
$set: { name: "Alice" },
$inc: { loginCount: 1 },
$push: { tags: "moderator" },
$pull: { tags: "guest" },
$addToSet: { roles: "admin" }, // Add if not exists
$currentDate: { lastModified: true }
}
);
// Upsert
db.users.updateOne(
{ email: "[email protected]" },
{ $set: { name: "Dave", age: 28 } },
{ upsert: true }
);
```
**Delete:**
```javascript
// Delete one
db.users.deleteOne({ email: "[email protected]" });
// Delete many
db.users.deleteMany({ age: { $lt: 18 } });
// Find and modify
db.users.findOneAndUpdate(
{ email: "[email protected]" },
{ $inc: { age: 1 } },
{ returnDocument: "after" }
);
db.users.findOneAndDelete({ email: "[email protected]" });
```
### Query Operators
**Comparison:**
```javascript
// $eq, $ne, $gt, $gte, $lt, $lte, $in, $nin
db.users.find({ age: { $eq: 30 } });
db.users.find({ age: { $ne: 30 } });
db.users.find({ age: { $gt: 25, $lt: 35 } });
db.users.find({ role: { $in: ["admin", "moderator"] } });
db.users.find({ role: { $nin: ["guest", "banned"] } });
```
**Logical:**
```javascript
// $and, $or, $not, $nor
db.users.find({
$and: [
{ age: { $gt: 25 } },
{ role: "admin" }
]
});
db.users.find({
$or: [
{ age: { $lt: 18 } },
{ age: { $gt: 65 } }
]
});
db.users.find({
age: { $not: { $lt: 18 } }
});
```
**Element:**
```javascript
// $exists, $type
db.users.find({ phone: { $exists: true } });
db.users.find({ age: { $type: "number" } });
db.users.find({ tags: { $type: "array" } });
```
**Array:**
```javascript
// $all, $elemMatch, $size
db.users.find({ tags: { $all: ["admin", "developer"] } });
db.orders.find({
items: {
$elemMatch: {
price: { $gt: 100 },
quantity: { $gte: 2 }
}
}
});
db.users.find({ tags: { $size: 3 } });
```
**Text Search:**
```javascript
// Create text index
db.articles.createIndex({ title: "text", content: "text" });
// Search
db.articles.find({ $text: { $search: "mongodb tutorial" } });
// Search with score
db.articles.find(
{ $text: { $search: "mongodb tutorial" } },
{ score: { $meta: "textScore" } }
).sort({ score: { $meta: "textScore" } });
```
### Aggregation Pipeline
**Basic Pipeline:**
```javascript
db.orders.aggregate([
// Match documents
{ $match: { status: "completed" } },
// Group and calculate
{ $group: {
_id: "$userId",
totalSpent: { $sum: "$total" },
orderCount: { $sum: 1 },
avgOrder: { $avg: "$total" }
}},
// Sort results
{ $sort: { totalSpent: -1 } },
// Limit results
{ $limit: 10 },
// Project (select fields)
{ $project: {
_id: 0,
userId: "$_id",
totalSpent: 1,
orderCount: 1,
avgOrder: { $round: ["$avgOrder", 2] }
}}
]);
```
**Advanced Stages:**
```javascript
// $lookup (join)
db.orders.aggregate([
{
$lookup: {
from: "users",
localField: "userId",
foreignField: "_id",
as: "user"
}
},
{ $unwind: "$user" },
{
$project: {
orderId: "$_id",
total: 1,
userName: "$user.name",
userEmail: "$user.email"
}
}
]);
// $unwind (flatten arrays)
db.posts.aggregate([
{ $unwind: "$tags" },
{ $group: {
_id: "$tags",
count: { $sum: 1 }
}}
]);
// $facet (multiple pipelines)
db.products.aggregate([
{
$facet: {
byCategory: [
{ $group: { _id: "$category", count: { $sum: 1 } }},
{ $sort: { count: -1 } }
],
priceRanges: [
{ $bucket: {
groupBy: "$price",
boundaries: [0, 50, 100, 200, 500],
default: "500+",
output: { count: { $sum: 1 } }
}}
],
totalStats: [
{ $group: {
_id: null,
total: { $sum: 1 },
avgPrice: { $avg: "$price" },
maxPrice: { $max: "$price" }
}}
]
}
}
]);
// $addFields
db.users.aggregate([
{
$addFields: {
fullName: { $concat: ["$firstName", " ", "$lastName"] },
isAdult: { $gte: ["$age", 18] }
}
}
]);
// $replaceRoot
db.orders.aggregate([
{ $match: { status: "completed" } },
{ $replaceRoot: { newRoot: "$billing" } }
]);
```
**Aggregation Operators:**
```javascript
db.orders.aggregate([
{
$project: {
// Arithmetic
totalWithTax: { $multiply: ["$total", 1.1] },
discount: { $divide: ["$total", 10] },
// String
upperName: { $toUpper: "$customerName" },
emailDomain: { $substr: ["$email", { $indexOfCP: ["$email", "@"] }, -1] },
// Date
year: { $year: "$createdAt" },
month: { $month: "$createdAt" },
dayOfWeek: { $dayOfWeek: "$createdAt" },
// Conditional
status: {
$cond: {
if: { $gte: ["$total", 100] },
then: "high-value",
else: "normal"
}
},
// Array
itemCount: { $size: "$items" },
firstItem: { $arrayElemAt: ["$items", 0] },
itemNames: { $map: {
input: "$items",
as: "item",
in: "$$item.name"
}}
}
}
]);
```
### Indexing
**Index Types:**
```javascript
// Single field index
db.users.createIndex({ email: 1 }); // Ascending
db.users.createIndex({ age: -1 }); // Descending
// Compound index
db.users.createIndex({ age: 1, name: 1 });
// Multikey index (for arrays)
db.users.createIndex({ tags: 1 });
// Text index
db.articles.createIndex({ title: "text", content: "text" });
// Geospatial index
db.locations.createIndex({ coordinates: "2dsphere" });
// Hashed index (for sharding)
db.users.createIndex({ userId: "hashed" });
// TTL index (auto-delete documents)
db.sessions.createIndex(
{ createdAt: 1 },
{ expireAfterSeconds: 3600 }
);
// Unique index
db.users.createIndex(
{ email: 1 },
{ unique: true }
);
// Partial index
db.users.createIndex(
{ email: 1 },
{ partialFilterExpression: { age: { $gte: 18 } } }
);
// Sparse index
db.users.createIndex(
{ phone: 1 },
{ sparse: true }
);
```
**Index Management:**
```javascript
// List indexes
db.users.getIndexes();
// Drop index
db.users.dropIndex("email_1");
db.users.dropIndex({ email: 1 });
// Rebuild indexes
db.users.reIndex();
// Index stats
db.users.aggregate([{ $indexStats: {} }]);
// Explain query plan
db.users.find({ email: "[email protected]" }).explain("executionStats");
```
### Schema Design
**Embedded Documents:**
```javascript
// One-to-Few: Embed
{
_id: ObjectId("..."),
name: "Alice",
email: "[email protected]",
address: Related in data
monte-carlo-push-ingestion
IncludedExpert guide for pushing metadata, lineage, and query logs to Monte Carlo from any data warehouse.
datascripts
php-database
IncludedPHP database mastery - PDO, Eloquent, Doctrine, query optimization, and migrations
datascripts
monte-carlo-validation-notebook
IncludedGenerates SQL validation notebooks for dbt PR changes with before/after comparison queries.
datascripts
monte-carlo-monitor-creation
IncludedGuides creation of Monte Carlo monitors via MCP tools, producing monitors-as-code YAML for CI/CD deployment.
data
monte-carlo-prevent
IncludedSurfaces Monte Carlo data observability context (table health, alerts, lineage, blast radius) before SQL/dbt edits.
data
data-mesh-expert
IncludedExpert-level data mesh architecture, domain-oriented ownership, data products, federated governance, and self-serve platforms
data