mongodash
v2.6.0
Published
An utility library delivering super-useful and super-simple tools using MongoDB
Maintainers
Readme
A modern JavaScript & Typescript MongoDB-based utility library. Includes Reactive Tasks, Cron Tasks, Distributed Locks, Transactions, and a Dashboard.
See full documentation here
Installation:
npm install mongodashInitialization
import mongodash from 'mongodash';
await mongodash.init({
uri: 'mongodb://mongodb0.example.com:27017/myDatabase'
});See more initialization options here.
Reactive Tasks
import { reactiveTask } from 'mongodash';
// Trigger a task when a user is updated
await reactiveTask({
task: 'on-user-update',
collection: 'users',
handler: async ({ docId }) => {
console.log('User changed:', docId);
}
});See detailed description here.
cronTask
import { cronTask } from 'mongodash';
await cronTask('my-task-id', '5m 20s', async () => {
console.log('Hurray the task is running!');
});See detailed description and more cron tasks methods here.
withLock
import { withLock } from 'mongodash';
await withLock('my-lock-id', async () => {
// it is quaranteed this callback will never run in parallel,
// so all race-conditions are solved
const data = await loadFromDatabase();
data.counter += 1;
await saveToDatabase(data);
});See detailed description here.
withTransaction
import { withTransaction, getCollection } from 'mongodash';
const createdDocuments = await withTransaction(async (session) => {
const myDocument1 = { value: 1 };
const myDocument2 = { value: 2 };
const collection = getCollection('myCollection');
await collection.insertOne(myDocument1, { session });
await collection.insertOne(myDocument2, { session });
return [myDocument1, myDocument2];
});See detailed description here.
getCollection
import { getCollection } from 'mongodash';
const myCollection = getCollection('myCollectionName');See detailed description here.
getMongoClient
import { getMongoClient } from 'mongodash';
const mongoClient = getMongoClient();See detailed description here.
processInBatches
import { processInBatches } from 'mongodash';
await processInBatches(
db.collection('users'),
{ status: 'active' },
async (user) => {
// Transform user data
return {
updateOne: {
filter: { _id: user._id },
update: { $set: { processed: true } }
}
};
},
async (batchOps) => {
// Execute batch
await db.collection('users').bulkWrite(batchOps);
}
);See detailed description here.
Dashboard

import * as express from 'express';
import { serveDashboard } from 'mongodash';
const app = express();
app.use('/dashboard', async (req, res, next) => {
// Check if mongodash handled the request
const handled = await serveDashboard(req, res);
if (!handled) {
next();
}
});
app.listen(3000);See detailed description here.
getPrometheusMetrics
import { getPrometheusMetrics } from 'mongodash';
app.get('/metrics', async (req, res) => {
const registry = await getPrometheusMetrics();
res.set('Content-Type', registry.contentType);
res.end(await registry.metrics());
});