Skip to content

jokio/jok-mango

Repository files navigation

jok-mango CircleCI

Simplified way to work with MongoDB

platform: jokio npm version codecov


Features

✅ Stores _id: ObjectId field, but wraps it to the id: string

✅ Documents have version: number out of the box, and its increased by 1 every time you call update

✅ Every document has createdAt and updatedAt props

✅ Soft Delete & Hard Delete ability for documents



How to use

  1. Declare data structure
import { DocumentBase } from 'jok-mango'

export interface User extends DocumentBase {
	email: string
	passwordHash: string
	fullname?: string
}
  1. Create repository object for declared type
import { getRepository } from 'jok-mango'

const connectionString = `mongodb://mongo:mongo@localhost:27017/test?authSource=admin`
const client = new MongoClient(connectionString, { useNewUrlParser: true })

await client.connect()

const db = client.db()

const users = getRepository<User>(db, 'users')
  1. Use repository object
const user = await users.create({
	email: 'test@jok.io',
	passwordHash: 'strong-hash',
})

const { id, version } = user

const updatedUser = await users.update(
	{ id, version },
	{
		email: 'tester@jok.io',
	},
)

Performance Cost

Library calls _id.toHexString() for all retrieved items to have id: string and make developers life easier, so logical quetion is: How expensive operation is it.

Hardware: MacBook Pro (Retina, 15-inch, Mid 2014) Processor: 2.2 GHz Intel Core i7

Number of Operations Duration
1 ~20 μs
1 000 ~829 μs
1 000 000 ~250 ms