A lightweight Gitlab based JSON database with Mongo-style API. Backed by gitbeaker and mingo.
npm i gitlab-db
import GitlabDB from 'gitlab-db'
// Instantiate a database
const db = new GitlabDB('apple', {
url: 'http://gitlab.example.com',
token: 'your_access_token',
repo: 'group/repo',
})
// Create a collection
db.createCollection('product')
// CRUD
db.collection('product').save({ name: 'iphone', v: '8', price: 699 })
db.collection('product').find({ name: 'iphone' })
db.collection('product').update({ name: 'iphone', v: '8' }, { price: 599 })
db.collection('product').remove({ name: 'iphone', v: '7' })Repository structure will be:
└── <repository root>
├── apple
│ └── product.json
Note: As all APIs returns a promise. I highly recommend the async/await statement like the following:
const result = await db.collection('product').save({ name: 'iphone', v: '8', price: 699 })Instantiate a database.
- dbName:
StringName of the database you want to create. - options:
Object- url:
StringSpecify gitlab url, eg:http://gitlab.example.com. - token:
StringSpecify your personal access token. - repo:
StringSpecify repository name and group belongs to, format:group/repo. - branch:
StringOptional, specify branch, default:main.
- url:
- customGitlabAPI:
ConstructorSpecify your custom GitlabAPI like@gitbeaker/browser.
Create a collection.
- collectionName:
StringName of the collection you want to create. - documents:
ArrayOptional. Specifies default data of the collection about to be created.
Connect to a collection.
- collectionName:
StringName of the collection you want to connect. - options:
ObjectOptional settings.- key:
StringSpecify a key of the collection.
- key:
Inserts a new document(or multiple documents). This method will returns the inserted document(s).
- document:
Object|ArrayA document or multiple documents to save to the collection.
Returns like:
Insert single document:
{ added: 1, document: {...} }Insert multiple documents:
{ added: 2, documents: [{...}, {...}] }Note: it will return { added: 0 } if a key is specified and the document that the key points to already exists.
Selects documents in a collection.
- query:
ObjectOptional. Specifies selection filter using query operators. To return all documents in a collection, omit this parameter or pass an empty document ({}).
Returns like:
[{ _id: 1, ... }]Modifies an existing document or documents in a collection.
- query:
ObjectThe selection criteria for the update. The same query selectors as in the find() method are available. - update:
ObjectThe modifications to apply.
Returns like:
{ updated: 2 }Another usage, execute multiple updates at once to reduce gitlab requests:
db.collection(collectionName).update([
{ query: { id: 1 }, update: { v: 1 } },
{ query: { id: 2 }, update: { v: 2 } },
])Removes documents from a collection.
- query:
ObjectSpecifies deletion criteria using query operators.
Returns like:
{ removed: 1 }Check if a collection exists.
- collectionName:
StringName of the collection you want to check.
Returns like:
trueimport { Gitlab } from '@gitbeaker/browser';
import GitlabDB from 'gitlab-db'
// Instantiate a database
const db = new GitlabDB('apple', {
url: 'http://gitlab.example.com',
token: 'your_access_token',
repo: 'group/repo',
}, Gitlab)
// ETC...- model check
- collection deletion
Config your environment variables GITLAB_URL ACCESS_TOKEN REPO, and run tests with:
GITLAB_URL={your_gitlab_url} ACCESS_TOKEN={your_access_token} REPO={yourGroup/yourRepo} npm run test