Create Indexes FirstYou MUST create at least one index per collection. Without indexes, queries perform full collection scans and the dashboard cannot display collections. Create indexes BEFORE storing data.
// Always create indexes before storing dataconst db = client.database('my-app');await db.createIndex({ name: 'idx_users_email', collection: 'users', field_name: 'email', index_type: 'hash', unique_constraint: true, store_values: true});// Index fields you'll queryawait db.createIndex({ name: 'idx_users_createdAt', collection: 'users', field_name: 'createdAt', index_type: 'btree'});// Now store dataawait client.store({ collection: 'users', data: [...] });
Use TypeScript for full type safety and better development experience.
interface User { id: string; email: string; name: string; createdAt: string;}const user = await client.queryBuilder() .collection('users') .whereField('email').equals('alice@example.com') .executeUnique<User>();// user is User | null with full IntelliSenseconst users = await client.queryBuilder() .collection('users') .whereField('active').isTrue() .execute<User>();// users.records is User[]
Use batch operations for large datasets to improve efficiency.
// Store multiple records in a single callawait client.store( { collection: 'products', data: products }, paymentCallback, true);// For large datasets, chunk into batchesconst BATCH_SIZE = 100;for (let i = 0; i < products.length; i += BATCH_SIZE) { const chunk = products.slice(i, i + BATCH_SIZE); await client.store({ collection: 'products', data: chunk }, paymentCallback, true); console.log(`${Math.min(i + BATCH_SIZE, products.length)}/${products.length}`);}