Yet another mongodb native driver facade. Takes care of:
- mongo URI parsing
- opening and closing DB connections
- opening collections
Install by running
npm install mniam Connect to database mniam-test and create friends collection with index on name field.
const db = database('mongodb://localhost/mniam-test'); const friends = db.collection({ name: 'friends', indexes: [[{ name: 1 }]] });Mniam is using MongoClient to establish the connection: full mongo database URLs are supported. The database function also takes a hash of options divided into db/server/replset/mongos allowing you to tweak options not directly supported by the unified url string format.
const db = database('mongodb://localhost/mniam-test', { db: { w: -1 }, server: { ssl: true } });Add a new documents:
const item = await friends.save({ name: 'Alice', age: 14, }; console.log('Item id:', item._id);Update a document:
const item = await friends.findAndModify({ _id: item._id }, { $set: { age: 15 } }); console.log('Alice is now:', item.age);Remove a document:
await friends.deleteOne({ name: 'Alice' });Use query, fields and options to create and configure cursor. Iterate over the results of the query using toArray, eachSeries, eachLimit methods.
items- can be used as async iterator
for await (const friend of friends.query({ age: { $gt: 21 } }).items()) { console.log('My friend over 21 years old', friend.name); }toArray- converts query results into array
const arr = await friends.query({ age: { $gt: 21 } }).toArray(); console.log('My friends over 21 years old', arr);eachSeries- callsonItemsequentially for all results
await friends .query() .fields({ name: 1 }) .eachSeries(async item => console.log('Name:', item.name)); console.log('All friends listed.');eachLimit- iterates over all results callingonItemin parallel, but no more thanlimitat a time
await friends .query() .options({ sort: { age: 1 } }) .eachLimit(4, async item => console.log('Friend', item)); console.log('All friends listed.');Mniam collections provides flex API for aggregation pipeline:
const results = await friends .aggregate() // start pipeline .project({ author: 1, tags: 1 }) .unwind('$tags') .group({ _id : { tags : '$tags' }, authors : { $addToSet : '$author' }, count: { $sum: 1 } }) .sort({ count: -1 }) .toArray(); console.log(results);In addition to toArray you can use eachSeries and eachLimit to iterate over aggregation results. Each aggregation stage ($project, $unwind, $sort, etc.) has a corresponding function with the same name (without $). You can also pass a traditional array of stages to .pipeline(stages) method, and set options with .options({}) method.
MIT