Tiven

Tiven

博观而约取,厚积而薄发

天问的个人网站(天问博客),专注于Node.js、Vue.js、React、Vite、Npm、Nginx等大前端技术。不断学习新技术,记录日常开发问题,持续分享coding,极客开源,共同进步。生命不息,奋斗不止... [ hexo blog ]

lowdb轻量数据库使用技巧


lowdb 是一个简单易用的本地 JSON 数据库,使用原生 JavaScript API 进行查询。在几个项目应用过,记录下常用的API和使用技巧。

lowdb 数据库

使用的lowdb版本:"^1.0.0"

一、安装和用法

pnpm add lowdb@1.0.0

基本用法:

const low = require('lowdb');
const FileSync = require('lowdb/adapters/FileSync');
const {join} = require("path");

const adapter = new FileSync(join(__dirname, 'db.json'));
const db = low(adapter);

二、常用操作

  1. 初始化数据,相当于建表,如果已存在,则不会重复创建,也不会覆盖原有数据。
db.defaults({ 
  posts: [], 
  user: {
    name: 'tiven',
    age: 18,
    city: 'shanghai',
    language: ['javascript', 'nodejs', 'vue', 'react', 'angular']
  } }).write();
  1. 查询
// 查询所有数据
db.get('posts').value();

// 查询单条数据
db.get('posts').find({ id: 1 }).value();

// 查询多条数据
db.get('posts').filter({ status: 1 }).value();

// 查询表中数据的条数
db.get('posts').size().value();

// 查询表中是否存在某条数据
db.get('posts').find({ id: 1 }).has('id').value();

// 多属性查询
db.get('users.language').value();

// 获取特定字段集合
db.get('posts').map('id').value();
  1. 插入
// 插入单条数据
db.get('posts').push({ id: 1, title: 'lowdb' }).write();

// 插入多条数据
db.get('posts').push([{ id: 1, title: 'lowdb' }, { id: 2, title: 'lowdb' }]).write();

// 插入表中所有数据
db.get('posts').map(({ title, desc, id }) => ({ title, desc, id })).write();
  1. 更新
// 更新单条数据
db.get('posts').find({ id: 1 }).assign({ title: 'lowdb' }).write();

// 更新多条数据
db.get('posts').filler({
  age: 18,
}).assign({
  updateAt: new Date(),
}).write();

// 更新属性
db.get('users').set('age', 20).write();
// or
db.set('users.set', 20).write();
  1. 删除
// 删除单条数据
db.get('posts').remove({ id: 1 }).write();

// 删除多条数据
db.get('posts').remove({ status: 1 }).write();

// 删除表中所有数据
db.get('posts').remove().write();

// 移除属性
db.unset('users.name').write();
  1. 排序
// 升序 asc 
db.get('posts').sortBy('age').value();

// 降序 desc
db.get('posts').orderBy('age', 'desc').value();

// 截取 0 ~ 5 条数据
db.get('posts').take(5).value();
  1. 深拷贝
db.get('users').cloneDeep().value();

更多使用方法请参考:lodash 官方文档 ,基本都是通用的。

三、进阶用法

数据加解密

var crypto = require('crypto')

var cipher = crypto.createCipher('aes256', secretKey)
var decipher = crypto.createDecipher('aes256', secretKey)

low.stringify = function(obj) {
  var str = JSON.stringify(obj)
  return cipher.update(str, 'utf8', 'hex') + cipher.final('hex')
}

low.parse = function(encrypted) {
  var str = decipher.update(encrypted, 'hex', 'utf8') + decipher.final('utf8')
  return JSON.parse(str)
}

欢迎访问:天问博客