Documentation Index
Fetch the complete documentation index at: https://mintlify.com/estebanrfp/gdb/llms.txt
Use this file to discover all available pages before exploring further.
Overview
Comparison operators enable precise filtering of nodes based on field values. These operators work with db.map() queries and support numbers, strings, dates, and arrays.
Operators
$eq - Equals
Matches nodes where the field equals the specified value.
// Explicit equality
const { results } = await db.map({
query: {
type: { $eq: "User" }
}
})
// Shorthand (implicit $eq)
const { results } = await db.map({
query: {
type: "User"
}
})
$ne - Not Equals
Matches nodes where the field does not equal the specified value.
const { results } = await db.map({
query: {
status: { $ne: "deleted" }
}
})
$gt - Greater Than
Matches nodes where the field is greater than the specified value.
// Users older than 18
const { results } = await db.map({
query: {
type: "User",
age: { $gt: 18 }
}
})
// Prices above $100
const { results } = await db.map({
query: {
type: "Product",
price: { $gt: 100 }
}
})
$gte - Greater Than or Equal
Matches nodes where the field is greater than or equal to the specified value.
// Premium users (level 5 or higher)
const { results } = await db.map({
query: {
type: "User",
level: { $gte: 5 }
}
})
$lt - Less Than
Matches nodes where the field is less than the specified value.
// Small files only
const { results } = await db.map({
query: {
type: "File",
size: { $lt: 1024 } // Less than 1KB
}
})
$lte - Less Than or Equal
Matches nodes where the field is less than or equal to the specified value.
// Budget items
const { results } = await db.map({
query: {
type: "Product",
price: { $lte: 50 }
}
})
$in - In Array
Matches nodes where the field value is in the specified array.
// Users with specific roles
const { results } = await db.map({
query: {
type: "User",
role: { $in: ["admin", "moderator", "editor"] }
}
})
// Products with specific tags
const { results } = await db.map({
query: {
type: "Product",
tags: { $in: ["electronics", "computers"] }
}
})
$between - Range
Matches nodes where the field value falls between two values (inclusive).
// Ages between 18 and 65
const { results } = await db.map({
query: {
type: "User",
age: { $between: [18, 65] }
}
})
// Prices in range
const { results } = await db.map({
query: {
type: "Product",
price: { $between: [10, 100] }
}
})
// Date ranges (ISO format)
const { results } = await db.map({
query: {
type: "Event",
date: { $between: ["2024-01-01", "2024-12-31"] }
}
})
$exists - Field Existence
Matches nodes where the field exists (or doesn’t exist).
// Nodes with email field
const { results } = await db.map({
query: {
email: { $exists: true }
}
})
// Nodes without deletion marker
const { results } = await db.map({
query: {
type: "Task",
deleted: { $exists: false }
}
})
Examples
Age Range Query
const findUsersByAge = async (minAge, maxAge) => {
const { results } = await db.map({
query: {
type: "User",
age: { $between: [minAge, maxAge] }
},
field: "age",
order: "asc"
})
return results
}
const adults = await findUsersByAge(18, 99)
console.log(`Found ${adults.length} adult users`)
Price Filter
// Products under $50
const { results: budget } = await db.map({
query: {
type: "Product",
price: { $lte: 50 },
inStock: true
}
})
// Products over $1000
const { results: premium } = await db.map({
query: {
type: "Product",
price: { $gt: 1000 }
}
})
Status Filtering
// Active tasks (not completed or deleted)
const { results } = await db.map({
query: {
type: "Task",
status: { $ne: "completed" },
deleted: { $exists: false }
}
})
Multi-Role Query
const findStaff = async () => {
const { results } = await db.map({
query: {
type: "User",
role: { $in: ["admin", "moderator", "editor"] }
},
field: "name",
order: "asc"
})
return results
}
File Size Filter
// Large files (over 10MB)
const { results: largeFiles } = await db.map({
query: {
type: "File",
size: { $gt: 10 * 1024 * 1024 } // 10MB in bytes
},
field: "size",
order: "desc"
})
// Medium files (1MB - 10MB)
const { results: mediumFiles } = await db.map({
query: {
type: "File",
size: { $between: [1024 * 1024, 10 * 1024 * 1024] }
}
})
Date Range Queries
// Posts from 2024
const { results } = await db.map({
query: {
type: "Post",
createdAt: {
$between: [
new Date("2024-01-01").getTime(),
new Date("2024-12-31").getTime()
]
}
}
})
// Recent posts (last 7 days)
const sevenDaysAgo = Date.now() - (7 * 24 * 60 * 60 * 1000)
const { results: recent } = await db.map({
query: {
type: "Post",
createdAt: { $gt: sevenDaysAgo }
},
field: "createdAt",
order: "desc"
})
Combining Multiple Operators
// Active users with complete profiles
const { results } = await db.map({
query: {
type: "User",
status: { $eq: "active" },
age: { $gte: 18 },
email: { $exists: true },
verified: true
}
})
// Products in stock within price range
const { results: products } = await db.map({
query: {
type: "Product",
price: { $between: [20, 200] },
inStock: true,
category: { $in: ["electronics", "computers"] }
}
})
Real-Time Price Monitoring
const { unsubscribe } = await db.map(
{
query: {
type: "Product",
price: { $lte: 100 }
}
},
({ id, value, action }) => {
if (action === "added") {
console.log(`New product under $100: ${value.name}`)
notifyUser(value)
}
if (action === "updated" && value.price > 100) {
console.log(`${value.name} now exceeds budget`)
}
}
)
Inventory Management
// Low stock items
const { results: lowStock } = await db.map({
query: {
type: "Product",
quantity: { $lt: 10 },
discontinued: { $exists: false }
},
field: "quantity",
order: "asc"
})
console.log(`${lowStock.length} items need reordering`)
Operator Combinations
You can combine multiple operators on the same field using logical operators:// Age NOT between 18-65
const { results } = await db.map({
query: {
$or: [
{ age: { $lt: 18 } },
{ age: { $gt: 65 } }
]
}
})
Type Support
| Operator | Numbers | Strings | Dates | Booleans | Arrays |
|---|
| $eq | ✅ | ✅ | ✅ | ✅ | ✅ |
| $ne | ✅ | ✅ | ✅ | ✅ | ✅ |
| $gt | ✅ | ✅ | ✅ | ❌ | ❌ |
| $gte | ✅ | ✅ | ✅ | ❌ | ❌ |
| $lt | ✅ | ✅ | ✅ | ❌ | ❌ |
| $lte | ✅ | ✅ | ✅ | ❌ | ❌ |
| $in | ✅ | ✅ | ✅ | ✅ | ✅ |
| $between | ✅ | ✅ | ✅ | ❌ | ❌ |
| $exists | ✅ | ✅ | ✅ | ✅ | ✅ |
Best Practices
**Use inforMultipleValues∗∗:Insteadofmultipleeq queries, use $in:// ✅ Good
{ role: { $in: ["admin", "editor"] } }
// ❌ Avoid
{ $or: [{ role: "admin" }, { role: "editor" }] }
Date Comparisons: Always use timestamps (numbers) or ISO strings for consistent date comparisons:// ✅ Recommended
{ createdAt: { $gt: Date.now() - 86400000 } }
// ✅ Also good
{ date: { $between: ["2024-01-01", "2024-12-31"] } }