home / skills / tencentcloudbase / cloudbase-mcp / no-sql-web-sdk

This skill helps you query, create, update, and delete data with CloudBase Web SDK, enabling complex queries, pagination, and geolocation.

This is most likely a fork of the no-sql-web-sdk skill from tencentcloudbase
npx playbooks add skill tencentcloudbase/cloudbase-mcp --skill no-sql-web-sdk

Review the files below or copy the command above to add this skill to your agents.

Files (8)
SKILL.md
6.4 KB
---
name: cloudbase-document-database-web-sdk
description: Use CloudBase document database Web SDK to query, create, update, and delete data. Supports complex queries, pagination, aggregation, and geolocation queries.
---

# CloudBase Document Database Web SDK

This skill provides guidance on using the CloudBase document database Web SDK for data operations in web applications.


## Core Concepts

### Initialization

Before using any database operations, initialize the CloudBase SDK:

```javascript
import cloudbase from "@cloudbase/js-sdk";
// UMD version
// If you are not using npm, And want to use UMD version instead. You should refer to https://docs.cloudbase.net/quick-start/#web-%E5%BF%AB%E9%80%9F%E4%BD%93%E9%AA%8C for latest version of UMD version.

const app = cloudbase.init({
  env: "your-env-id", // Replace with your environment id
});


const db = app.database();
const _ = db.command; // Get query operators

// ... login
```
Remember to sign in(auth) is ***REQUIRED** before actually querying the database.

### Collection Reference

Access collections using:
```javascript
db.collection('collection-name')
```

### Query Operators

CloudBase provides query operators via `db.command` (aliased as `_`):
- `_.gt(value)` - Greater than
- `_.gte(value)` - Greater than or equal
- `_.lt(value)` - Less than
- `_.lte(value)` - Less than or equal
- `_.eq(value)` - Equal to
- `_.neq(value)` - Not equal to
- `_.in(array)` - Value in array
- `_.nin(array)` - Value not in array

## Basic Operations

### Query Single Document

Query by document ID:
```javascript
const result = await db.collection('todos')
    .doc('docId')
    .get();
```

### Query Multiple Documents

Query with conditions:
```javascript
const result = await db.collection('todos')
    .where({
        completed: false,
        priority: 'high'
    })
    .get();
```

**Note:** `get()` returns 100 records by default, maximum 1000.

### Query Methods Chaining

Combine methods for complex queries:
- `.where(conditions)` - Filter conditions
- `.orderBy(field, direction)` - Sort by field ('asc' or 'desc')
- `.limit(number)` - Limit results (default 100, max 1000)
- `.skip(number)` - Skip records for pagination
- `.field(object)` - Specify fields to return (true/false)

## Advanced Features

For detailed information on specific topics, refer to:

### CRUD Operations
See `./crud-operations.md` for:
- Creating documents (add, batch add)
- Updating documents (partial updates, operators)
- Deleting documents (conditional delete, soft delete)
- Complete CRUD manager examples

### Complex Queries
See `./complex-queries.md` for:
- Using query operators
- Combining multiple conditions
- Field selection
- Sorting and limiting results

### Pagination
See `./pagination.md` for:
- Implementing page-based navigation
- Calculating skip and limit values
- Cursor-based pagination
- Infinite scroll patterns

### Aggregation Queries
See `./aggregation.md` for:
- Grouping data
- Statistical calculations
- Pipeline operations
- Time-based aggregations

### Geolocation Queries
See `./geolocation.md` for:
- Proximity searches
- Area-based queries
- Geographic indexing requirements
- Distance-based features

### Realtime Database
See `./realtime.md` for:
- Real-time data synchronization using watch() method
- Setting up listeners for document changes
- Handling real-time updates in chat and collaboration apps
- Performance optimization and error handling
- Common patterns for real-time applications

### Security Rules
See `./security-rules.md` for:
- Configuring database permissions
- Simple permissions vs custom rules
- Permission categories and usage
- Security rule syntax and examples

## Common Patterns

### Error Handling
Always wrap database operations in try-catch:
```javascript
try {
    const result = await db.collection('todos').get();
    console.log(result.data);
} catch (error) {
    console.error('Database error:', error);
}
```

### Return Value Structure
Database operations return:
```javascript
{
    data: [...], // Array of documents
    // Additional metadata
}
```

## Important Notes

1. **Environment ID**: Replace `"your-env-id"` with actual CloudBase environment ID
2. **Default Limits**: `get()` returns 100 records by default
3. **Collection Names**: Use string literals for collection names
4. **Geolocation Index**: Geographic queries require proper indexing
5. **Async/Await**: All database operations are asynchronous

## Best Practices

1. Initialize SDK once at application startup
2. Reuse database instance across the application
3. Use query operators for complex conditions
4. Implement pagination for large datasets
5. Select only needed fields to reduce data transfer
6. Handle errors appropriately
7. Create indexes for frequently queried fields

### Coding Rules

- It is **HIGHLY RECOMMENDED** to have a type definition and model layer for each collection in your document database. This will help you to avoid errors and make your code more robust. That would be the single source of truth for your database schema. Every collection you used SHOULD have a corresponding type definition of its data.
- Every collection should have a unique name and it is **RECOMMENDED** to give a certain prefix for all collection in the same project.
- Collections should have well defined and meaningful security rules(policy) for create, read, write and delete permission according to the business logic. Details refer to `./security-rules.md`. When writing expressions in security rules, The type definition of the collection mention above can be used as the type reference.

## Quick Reference

Common query examples:

```javascript
// Simple query
db.collection('todos').where({ status: 'active' }).get()

// With operators
db.collection('users').where({ age: _.gt(18) }).get()

// Pagination
db.collection('posts')
    .orderBy('createdAt', 'desc')
    .skip(20)
    .limit(10)
    .get()

// Field selection
db.collection('users')
    .field({ name: true, email: true, _id: false })
    .get()
```

For more detailed examples and advanced usage patterns, refer to the companion reference files in this directory.

## Error handling
**EVERY** database operation(including `get()`, `add()`, `update()`, `delete()` etc)should check the return value's code for any errors. For example:
```javascript
const result = await db.collection('todos').add(newTodo);
if(typeof result.code === 'string') {
    // Handle error ...
}
```

Error **MUST** be handled with detail and human-readable message and friendly UI.

Overview

This skill teaches how to use the CloudBase document database Web SDK to query, create, update, and delete documents from web apps. It covers initialization, collection access, query operators, pagination, aggregation, geolocation queries, and realtime listeners. The guidance emphasizes error handling, security rules, and efficient data access patterns for production apps.

How this skill works

Initialize the CloudBase SDK with your environment ID, sign in, then obtain a database instance via app.database(). Use db.collection('name') to reference collections and db.command (aliased as _) for query operators like _.gt, _.in, _.eq. Chain methods such as .where(), .orderBy(), .limit(), .skip(), and .field() to build queries, and use async/await with try/catch to handle results and errors.

When to use it

  • Building web apps that need CRUD operations on a serverless document store
  • Implementing complex filters, sorting, and pagination for list views
  • Running aggregation pipelines or time-based statistics on stored documents
  • Adding proximity or area-based search using geolocation queries
  • Powering real-time features like live updates or collaborative interfaces

Best practices

  • Initialize the SDK once on app startup and reuse the same db instance
  • Always require user sign-in before performing database operations
  • Define TypeScript types or a model layer per collection as the single source of truth
  • Select only needed fields and paginate large result sets to reduce bandwidth
  • Create indexes for frequently queried fields and enforce meaningful security rules
  • Wrap every DB call in try/catch and validate result codes for human-friendly error messages

Example use cases

  • Fetch recent posts with pagination and sorting for a feed view
  • Run aggregation to compute daily active users or sales totals
  • Perform geolocation-based searches to find nearby venues
  • Implement chat with realtime watch() listeners and optimistic UI updates
  • Batch-add or update records during data import with error reporting

FAQ

Do I need to authenticate before querying?

Yes. Sign-in is required before actual database queries; initialize app and perform authentication first.

What are default limits for get()?

get() returns 100 records by default; the maximum per request is 1000. Use pagination or cursors for larger datasets.

How should I handle errors from DB operations?

Check the returned result code, wrap calls in try/catch, and surface human-readable messages to the UI with detailed logs.