TheDocumentation Index
Fetch the complete documentation index at: https://confect.dev/llms.txt
Use this file to discover all available pages before exploring further.
DatabaseReader service is used to read documents from the database.
Retrieve a single document
By ID
By index
Single field
Multiple fields
Retrieve multiple documents
Indexes
Every query must specify either a standard index or a search index.Standard indexes
Standard indexes are what you’ll use most of the time. There are two default standard indexes, which exist for every table:by_creation_time and by_id. The rest are defined in your schema.
Standard indexes determine both the sort order of the results and which fields may be filtered on. Fields must be filtered in the order they are defined in the index.
Order is ascending by default, but can be specified in the final argument to the index method.
Users sorted by name and age, ascending
Users sorted by name and age, descending
Users sorted by name and age, where name equals "John Doe", ascending
Users sorted by name and age, where name equals "John Doe", and age equals 21, descending
Search indexes
Search indexes are used for full-text search, and are defined in your schema. The results are always sorted by relevance, descending.Methods
The following methods are available for queries using both database indexes and search indexes.Collect
Collect all documents matching the query.First
Retrieve the first document matching the query.Take
Take the firstn documents matching the query.
Paginate
Retrieve a page of documents matching the query. Expects aPaginationOptions object.
Stream
Get aStream of documents matching the query.
Accessing the current time
Convex queries are cached based on the data they read. CallingDate.now() directly in a query reads real wall-clock time, which invalidates the cache and causes unnecessary re-execution — Convex’s own best practices advise against it.
To keep queries cacheable by default, confect stubs Date.now() to return 0 for the span of a query handler. If you need the current time inside a query, reach for Effect’s Clock service instead:
Clock.currentTimeMillis (or Clock.currentTimeNanos) returns the real timestamp. Note that this is an opt-in to cache invalidation: any query that reads the clock will frequently bust the cache and be re-executed, rather than reliably served from cache. This matches Convex’s behavior for any query that observes real time.
If you don’t actually need sub-second accuracy, prefer Convex’s recommended patterns — passing a coarse timestamp as a query argument, or maintaining a boolean/status field updated by a scheduled function — to preserve caching.
Mutations and actions are unaffected: Date.now() works as expected there, and the Clock service returns the real timestamp without any caching concerns.