Crud Operations

Query Filters

Advanced MongoDB query operators

Comparison Operators

-- Equal
{ level = 5 }
-- Not equal
{ rank = { ["$ne"] = "Banned" } }
-- Greater than / Less than
{ level = { ["$gt"] = 10 } }   -- level > 10
{ level = { ["$gte"] = 10 } }  -- level >= 10  
{ level = { ["$lt"] = 50 } }   -- level < 50
{ level = { ["$lte"] = 50 } }  -- level <= 50
-- In array
{ rank = { ["$in"] = { "VIP", "Premium", "Ultimate" } } }
-- Not in array
{ rank = { ["$nin"] = { "Banned", "Suspended" } } }

Logical Operators

-- AND (implicit)
{
    active = true,
    level = { ["$gte"] = 10 },
    rank = "VIP"
}
-- OR
{
    ["$or"] = {
        { rank = "Admin" },
        { level = { ["$gte"] = 100 } }
    }
}
-- Combined
{
    active = true,
    ["$or"] = {
        { rank = "VIP" },
        { playtime = { ["$gte"] = 1000 } }
    }
}

Element Operators

-- Field exists
{ email = { ["$exists"] = true } }
-- Type check
{ age = { ["$type"] = "number" } }

String Operators

-- Regex (starts with)
{ username = { ["$regex"] = "^Admin" } }
-- Case-insensitive
{ username = { ["$regex"] = "player", ["$options"] = "i" } }
-- Contains
{ bio = { ["$regex"] = "veteran" } }

Array Operators

-- Array contains value
{ tags = "veteran" }
-- Array size
{ items = { ["$size"] = 5 } }
-- All values match
{ tags = { ["$all"] = { "active", "verified" } } }

Date/Time Queries

-- Last 7 days
local weekAgo = os.time() - (7 * 24 * 60 * 60)
{ last_seen = { ["$gte"] = weekAgo } }
-- Between dates
{
    created_at = {
        ["$gte"] = startTime,
        ["$lte"] = endTime
    }
}
-- Today
local today = os.time() - (os.time() % 86400)
{ created_at = { ["$gte"] = today } }

Complex Examples

-- Active VIP players level 10+
players:Find({
    active = true,
    banned = { ["$ne"] = true },
    rank = { ["$in"] = { "VIP", "Premium" } },
    level = { ["$gte"] = 10 },
    last_seen = { ["$gte"] = os.time() - (30 * 24 * 60 * 60) }
})
-- Search with multiple conditions
players:Find({
    ["$or"] = {
        { username = { ["$regex"] = searchQuery, ["$options"] = "i" } },
        { steamid = searchQuery }
    },
    banned = false
}, 20)

Next Steps

Common Patterns

CRUD best practices

Advanced Features

Aggregation and indexes