novadb-rs
v1.0.0
Published
NovaDB – high-performance embeddable document database for Node.js
Maintainers
Readme
novadb-rs
High-performance embeddable document database for Node.js — powered by Rust.
Install
npm install novadb-rsQuick Start
const { NovaDb } = require('novadb-rs')
async function main() {
// In-memory (no disk I/O)
const db = await NovaDb.inMemory()
// Persistent (saved to disk)
// const db = await NovaDb.open('./mydata')
const users = db.collection('users')
// Insert
await users.insert({ _id: '1', name: 'Alice', age: 30 })
await users.insertMany([
{ _id: '2', name: 'Bob', age: 25 },
{ _id: '3', name: 'Carol', age: 35 },
])
// Query
const all = await users.find({})
const alice = await users.findOne({ name: 'Alice' })
const byId = await users.findById('2')
const count = await users.count({ age: { $gte: 30 } })
// Update
await users.updateOne({ name: 'Alice' }, { $set: { age: 31 } })
await users.updateMany({ age: { $lt: 30 } }, { $inc: { age: 1 } })
// Delete
await users.deleteOne({ name: 'Bob' })
await users.deleteMany({ age: { $lt: 25 } })
// Indexes (speeds up queries on that field)
await users.createIndex('name', /* unique */ true)
// Aggregation
const results = await users.aggregate([
{ $match: { age: { $gte: 25 } } },
{ $sort: { age: -1 } },
{ $limit: 10 },
{ $project: { name: 1, age: 1 } },
])
// Transactions
const txId = db.beginTransaction()
try {
await users.insert({ _id: '4', name: 'Dave', age: 28 })
db.commitTransaction(txId)
} catch (err) {
db.rollbackTransaction(txId)
}
}
main()Query Operators
| Operator | Description | Example |
|---|---|---|
| $eq | Equal | { age: { $eq: 30 } } |
| $ne | Not equal | { age: { $ne: 30 } } |
| $gt | Greater than | { age: { $gt: 25 } } |
| $gte | Greater than or equal | { age: { $gte: 25 } } |
| $lt | Less than | { age: { $lt: 40 } } |
| $lte | Less than or equal | { age: { $lte: 40 } } |
| $in | In array | { name: { $in: ['Alice','Bob'] } } |
| $nin | Not in array | { name: { $nin: ['Alice'] } } |
| $regex | Regex match | { name: { $regex: '^Al' } } |
| $and | Logical AND | { $and: [{ age: { $gte: 25 } }, { age: { $lte: 40 } }] } |
| $or | Logical OR | { $or: [{ name: 'Alice' }, { name: 'Bob' }] } |
Update Operators
| Operator | Description | Example |
|---|---|---|
| $set | Set field value | { $set: { age: 31 } } |
| $inc | Increment field | { $inc: { age: 1 } } |
| $push | Push to array | { $push: { tags: 'admin' } } |
| $unset | Remove field | { $unset: { temp: '' } } |
TypeScript
import { NovaDb, NovaCollection } from 'novadb-rs'
const db: NovaDb = await NovaDb.inMemory()
const users: NovaCollection = db.collection('users')Build from Source
Requires Rust + Node.js:
npm install
npm run buildLicense
MIT
