A minimal reactive document store with Mongo-like querying, reactivity, TTL support, and optional persistence.
npm install tinycollA minimal reactive document store with Mongo-like querying, reactivity, TTL support, and optional persistence (IndexedDB or filesystem).
- Reactive find, findOne, count
- Mongo-style query matcher ($eq, $gt, $in, $or, etc.)
- Custom TTL indexes (per Mongo's expireAfterSeconds style)
- Optional IndexedDB or file persistence
- Fast Map-based internal storage
- Signal-based reactivity with @preact/signals-core
``shell`
npm i tinycoll
`ts`
const users = new Collection('users');
`ts
const users = new Collection('users', { storage: indexedDbStorage });
const users = new Collection('users', {
storage: createFileStorage('./users.json'),
});
`
`ts`
users.insert({ name: 'Stephan', city: 'Leeuwarden' });
`tsfind()
// returns a ReactiveCursor. Supports projection, sorting, and reactivity.
const results = users.find({ city: 'Leeuwarden' }, {
sort: { name: 1 },
projection: { name: 1 },
});
effect(() => {
console.log(results.toArray());
});
`
Reactive results support .toArray(), .map(), .watch(), and pagination helpers like .paginate(page, perPage).
`ts``
new Collection('sessions', {
ttlIndexes: [
{
field: 'lastAccessedAt',
expireAfterSeconds: 3600,
},
],
});