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.
// $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"] } })
// $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" }] }
]
})
// $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"] } })
// $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 }
})
Explore 500+ free tutorials across 20+ languages and frameworks.