Data Operations
Guide for managing data in NocoBase collections — list, create, update, delete records.
Tools
| Tool | Purpose | Key Parameters |
|---|---|---|
data_list |
List records from a collection | collection, filter, sort, limit, offset |
data_create |
Create a new record | collection, data (field values) |
data_update |
Update an existing record | collection, filter/id, data (field values) |
data_delete |
Delete a record | collection, filter/id |
collection_get |
Get collection schema (for field reference) | collection name |
Workflows
Create a Single Record
Step 1: collection_get → get field names and types for the target collection
Step 2: data_create → create record with field values
Example:
collection_get("contacts")
→ fields: name (string), email (email), status (select), company (belongsTo)
data_create("contacts", {
name: "John Doe",
email: "john@example.com",
status: "Active"
})
→ { id: 1, name: "John Doe", ... }
Bulk Create Records
Step 1: collection_get → understand field schema
Step 2: data_create → repeat for each record
Step 3: data_list → verify all records were created
List and Filter Records
Step 1: data_list → list records with optional filter
Common filter patterns:
data_list("orders", { filter: { status: "Draft" } })
data_list("contacts", { filter: { createdAt: { $gte: "2024-01-01" } } })
data_list("products", { sort: ["-price"], limit: 10 })
Update a Record
Step 1: data_list → find the record to update (get its ID)
Step 2: data_update → update specific fields
Step 3: data_list → verify the update
Example:
data_list("orders", { filter: { id: 42 } })
→ { id: 42, status: "Draft", total: 1500 }
data_update("orders", { filter: { id: 42 }, data: { status: "Approved" } })
→ { id: 42, status: "Approved", total: 1500 }
Delete a Record
Step 1: data_list → find and confirm the record to delete
Step 2: data_delete → delete by ID
Step 3: data_list → verify deletion
Search and Update Multiple Records
Step 1: data_list → search for records matching criteria
Step 2: For each record: data_update → apply changes
Step 3: data_list → verify all updates
Example — mark overdue orders:
data_list("orders", { filter: { dueDate: { $lt: "2024-01-01" }, status: "Pending" } })
→ [{ id: 10 }, { id: 15 }, { id: 22 }]
data_update("orders", { filter: { id: 10 }, data: { status: "Overdue" } })
data_update("orders", { filter: { id: 15 }, data: { status: "Overdue" } })
data_update("orders", { filter: { id: 22 }, data: { status: "Overdue" } })
Error Handling Patterns
Common Failure Scenarios
- Collection not found → verify collection exists via
collection_listfirst - Invalid field name → use
collection_getto check valid field names before writes - Data type mismatch → ensure values match field types (string for text, number for integer)
- Relation target missing → for belongsTo fields, verify the related record's ID exists
- Permission denied → check if current user has write access to the collection
Defensive Workflow
- Always check collection exists via
collection_listbefore operations - Get collection schema via
collection_getto validate field names and types - For bulk creates: create records one by one and verify each, or batch and check results
- After writes: verify with
data_listand a filter on the created/updated record
Best Practices
- Always check schema first — use
collection_getbefore creating/updating to know valid field names - Filter before deleting — use
data_listto confirm what will be deleted - Verify after writes — use
data_listto confirm creates/updates succeeded - Use specific filters — filter by ID when possible for precision
- Respect field types — use correct value types (string, number, date format)
- Handle relations — for belongsTo fields, provide the related record's ID