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", {})