Document Database

import { defineSchema, defineTable } from "convex/server"

export default defineSchema({
  messages: defineTable({
    text: "string",
    user: "string",
  })
})

Example storing:

{
  _id: "abc123",
  text: "hello",
  user: "minhen"
}

Queries (Reading Data)

  1. Client calls query
  2. Convex executes function
  3. Database returns data
import { query } from "./_generated/server"

export const getMessages = query({
  handler: async (ctx) => {
    return await ctx.db
									  .**query**("messages").collect()
  }
})

export const getMessagesByIndex = query({
  handler: async (ctx) => {
    return await ctx.db
									  .query("messages")
									  .**withIndex**("by_user", q => q.eq("user","minhen"))
									  .collect()
  }
})

What happens:

Client calls query
      │
      ▼
Convex executes function
      │
      ▼
Database returns data

Mutations (Writing Data)

  1. Client