Data persistence manager for document-oriented data
DocORM is compatible with Node 16 and higher.
Install the latest version from npmjs.com:
npm install docorm
If you need to use the latest version on GitHub instead, install it this way:
npm install docorm@git+ssh://github.com/bbi-lab/docorm
import cls from 'cls-hooked'
import {db, initDocOrm, registerEntityTypes, registerSchemaDirectory} from 'docorm'
import path, {dirname} from 'path'
import {fileURLToPath} from 'url'
import {v4 as uuidv4} from 'uuid'
import config from '../config.js'
import logger from './logger.js'
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
export async function initDataPersistence() {
initDocOrm({
logger // Optional Winston logger
clsNamespaceName: 'arbitrary-namespace-name',
operationIdKey: 'operation-id',
postgresql: {
host: 'localhost',
port: 5432,
username: 'postgres',
password: 'postgres',
database: 'my_database',
allowUnknownSslCertificate: true,
ssl: true
}
})
await registerSchemaDirectory(path.join(__dirname, 'models-directory'), 'model')
await registerEntityTypes(path.join(__dirname, 'schemas-directory'))
}
- Data models based on JSON Schema
- A JSON-based query language suitable for exposure in APIs
- Relationship fetching
- Two query execution modes: immediate execution and streaming query execution using database cursors
Currently, only PostgreSQL 13 and higher are supported.
Data model schemas adhere to JSON Schema, with some limitations and some extensions.
Supported:
allOf
Unsupported:
oneOf
andanyOf
if
,then
,else
, andnot
properties
,patternProperties
, andadditionalProperties
dependentSchemas
propertyNames
prefixItems
contains
Any validation keywords may be used, but currently only the following keywords are used in DocORM's built-in validation. Your own code may add support for other validation keywords.
type
enum
All metadata keywords are allowed, but these do not entail any behavior in DocORM.
JSONPath, JSON pointers, and simple (dot-separated or array) paths
Use of JSONPath-Plus
- More ORM-like interface for interacting with relationships between documents
- Ability to map JSON properties to relational database columns