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:
String
Name of the database you want to create. - options:
Object
- url:
String
Specify gitlab url, eg:http://gitlab.example.com
. - token:
String
Specify your personal access token. - repo:
String
Specify repository name and group belongs to, format:group/repo
. - branch:
String
Optional, specify branch, default:main
.
- url:
- customGitlabAPI:
Constructor
Specify your custom GitlabAPI like@gitbeaker/browser
.
Create a collection.
- collectionName:
String
Name of the collection you want to create. - documents:
Array
Optional. Specifies default data of the collection about to be created.
Connect to a collection.
- collectionName:
String
Name of the collection you want to connect. - options:
Object
Optional settings.- key:
String
Specify a key of the collection.
- key:
Inserts a new document(or multiple documents). This method will returns the inserted document(s).
- document:
Object
|Array
A 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:
Object
Optional. 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:
Object
The selection criteria for the update. The same query selectors as in the find() method are available. - update:
Object
The 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:
Object
Specifies deletion criteria using query operators.
Returns like:
{ removed: 1 }
Check if a collection exists.
- collectionName:
String
Name of the collection you want to check.
Returns like:
true
import { 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