MongoDB Query Operators
What are Query Operators?
Query operators let you build powerful filters to match documents based on conditions. They are prefixed with $ and are used inside the filter argument of find(), updateOne(), deleteMany(), and other methods.
Comparison Operators
// $eq — equal to (same as { age: 29 })
db.users.find({ age: { $eq: 29 } })
// $ne — not equal to
db.users.find({ role: { $ne: "admin" } })
// $gt / $gte — greater than / greater than or equal
db.users.find({ age: { $gt: 25 } })
db.users.find({ age: { $gte: 18 } })
// $lt / $lte — less than / less than or equal
db.users.find({ age: { $lt: 65 } })
db.users.find({ score: { $lte: 100 } })
// Range query — age between 20 and 40
db.users.find({ age: { $gte: 20, $lte: 40 } })
// $in — matches any value in the array
db.users.find({ role: { $in: ["admin", "editor"] } })
// $nin — matches none of the values in the array
db.users.find({ status: { $nin: ["banned", "suspended"] } })
Logical Operators
// $and — all conditions must be true
db.users.find({
$and: [
{ age: { $gte: 18 } },
{ active: true },
{ role: "user" }
]
})
// $or — at least one condition must be true
db.users.find({
$or: [
{ role: "admin" },
{ age: { $gt: 50 } }
]
})
// $not — inverts the condition
db.users.find({ age: { $not: { $gt: 30 } } })
// $nor — none of the conditions must be true
db.users.find({
$nor: [
{ role: "banned" },
{ active: false }
]
})
// Combining $and and $or
db.users.find({
$and: [
{ active: true },
{ $or: [{ role: "admin" }, { role: "editor" }] }
]
})
Element Operators
// $exists — field exists (true) or does not exist (false)
db.users.find({ phone: { $exists: true } })
db.users.find({ deletedAt: { $exists: false } })
// $exists with a value check
db.users.find({ phone: { $exists: true, $ne: null } })
// $type — field matches a specific BSON type
db.users.find({ age: { $type: "int" } })
db.users.find({ age: { $type: "double" } })
db.users.find({ name: { $type: "string" } })
db.users.find({ tags: { $type: "array" } })
// Multiple types
db.users.find({ score: { $type: ["int", "double"] } })
Evaluation and Array Operators
// $regex — match a regular expression pattern
db.users.find({ name: { $regex: /^alice/i } })
db.users.find({ email: { $regex: "@gmail\\.com$" } })
// $expr — use aggregation expressions in queries
// Find users where their score is greater than their target
db.users.find({ $expr: { $gt: ["$score", "$target"] } })
// $all — array contains all specified values
db.products.find({ tags: { $all: ["mongodb", "database"] } })
// $elemMatch — at least one array element matches all conditions
db.orders.find({
items: {
$elemMatch: { product: "Laptop", qty: { $gte: 2 } }
}
})
// $size — array has exactly N elements
db.users.find({ hobbies: { $size: 3 } })
// Comparison: $eq $ne $gt $gte $lt $lte $in $nin
// Logical: $and $or $not $nor
// Element: $exists $type
// Evaluation: $regex $expr $where $mod $text
// Array: $all $elemMatch $size
// Bitwise: $bitsAllClear $bitsAllSet $bitsAnyClear $bitsAnySet
// Real-world example: find active premium users aged 25-45
// who have at least one order and a verified email
db.users.find({
active: true,
plan: "premium",
age: { $gte: 25, $lte: 45 },
orderCount: { $gte: 1 },
emailVerified: { $exists: true, $eq: true }
})