Database Ops · 5 of 6

count

Returns the number of documents matching a query — without loading them. With an indexed field, it's O(1).

Signatures

count(collection)
count(collection, query)

Total count

proc total_users() {
    return count("users")
}

Filtered count

proc active_users() {
    return count("users", {active: true})
}

Multiple filters

proc users_in_range(min, max) {
    return count("users", {age: {$gte: min, $lte: max}, active: true})
}

Count as a guard

proc enforce_quota(user_id, max_files) {
    let n = count("files", {owner: user_id})
    if n >= max_files { abort "file limit reached" }
    return {used: n, allowed: max_files}
}

Dashboard summary

proc dashboard() {
    return {
        users:    count("users"),
        active:   count("users", {active: true}),
        admins:   count("users", {role: "admin"}),
        sessions: count("sessions", {expired: false}),
        orders:   count("orders", {status: "open"})
    }
}

Count after a write

proc add_member(team_id, user_id) {
    insert("members", {team_id: team_id, user_id: user_id})
    let total = count("members", {team_id: team_id})
    return {ok: true, total_members: total}
}

Comparison: count vs find length

count is index-friendly and never loads documents. Don't do find(...).length-style patterns — use count.

// SLOW — loads all docs
let xs = find("users", {})
// can't get length anyway
// FAST — index-only
let n = count("users", {})
Report Issue