微信小程序本地数据库
-
复制
localDB.js(7.97KB,min版本4.26KB)到utils目录下 -
在需要使用的页面的
js文件中添加const localDB = require('utils/localDB.js') const _ = localDB.command
const localDB = require('utils/localDB.js')
const _ = localDB.command
localDB.init() // 初始化
var articles = localDB.collection('articles')
if(!articles)
articles = localDB.createCollection('articles') // 不存在则先创建
// 按文章 id 查找
var doc = articles.doc('xxx')
if(doc) {
var data = doc.get() // 取得数据
} else {
// 网络请求获取 data
data._timeout = Date.now() + 15 * 24 * 3600000 // 设置过期时间为 15 天
articles.add(data) // 添加到本地数据库
}
// 按类型查找
var data = articles.where({
type: 'xxx'
}).get()
// 正则查找
var data = articles.where({
title: /xxx/ // 标题中含有 xxx 的
}).get()
// 分页查找
var page2 = articles.skip(10).limit(10).get()
// 按时间查找
var data = articles.where({
date: _.gte('20200501').and(_.lte('20200510')) // 大于等于 20200501 小于等于 20200510
}).get()
// 结果排序
var data = articles.orderBy('date', 'desc').get() // 按日期降序排序
// 清理过期数据
articles.where({
_timeout: _.lt(Date.now()) // 过期时间早于当前的
}).remove()| 名称 | 输入值 | 返回值 | 功能 |
|---|---|---|---|
| init | / | / | 初始化数据库 |
| collection | name | Collection | 获取名称为 name 的集合 |
| createCollection | name | Collection | 创建一个名称为 name 的集合 |
| removeCollection | name | / | 移除名称为 name 的集合 |
| 名称 | 输入值 | 返回值 | 功能 |
|---|---|---|---|
| add | data | id | 向集合中添加一条数据 |
| count | / | number | 统计匹配查询条件的记录的条数 |
| doc | id | document | 获取一条记录 |
| get | / | array | 获取集合数据 |
| limit | number | collection | 指定查询结果集数量上限 |
| orderBy | field, order | collection | 指定查询排序条件 |
| remove | / | / | 删除多条数据 |
| skip | number | collection | 指定查询返回结果时从指定序列后的结果开始返回 |
| update | newVal | / | 更新多条数据 |
| where | query | collection | 进行条件查询 |
附:limit 和 skip 仅对 get 有效
| 名称 | 输入值 | 返回值 | 功能 |
|---|---|---|---|
| get | / | data | 获取记录数据 |
| remove | / | / | 删除该记录 |
| update | newVal | / | 更新记录数据 |
查询指令:
| 名称 | 功能 |
|---|---|
| eq | 等于 |
| neq | 不等于 |
| lt | 小于 |
| lte | 小于或等于 |
| gt | 大于 |
| gte | 大于或等于 |
| in | 字段值在给定数组中 |
| nin | 字段值不在给定数组中 |
| exists | 判断字段是否存在 |
| or | 多字段或查询 |
单个字段的条件之间还可以通过 or 和 and 进行组合,如
_.gt(30).and(_.lt(70)) // 大于 30 且小于 70
_.eq(0).or(_.eq(100)) // 等于 0 或等于 100or 指令用于多字段或查询(默认是与查询)
// 查询 collection 表中 a 字段为 1 或 b 字段为 2 的记录
collection.where(_.or([{
a: 1
}, {
b: 2
}]))更新指令:
| 名称 | 功能 |
|---|---|
| set | 设置字段为指定值 |
| remove | 删除字段 |
| inc | 原子自增字段值 |
| mul | 原子自乘字段值 |
| push | 如字段值为数组,往数组尾部增加指定值 |
| pop | 如字段值为数组,从数组尾部删除一个元素 |
| shift | 如字段值为数组,从数组头部删除一个元素 |
| unshift | 如字段值为数组,往数组头部增加指定值 |
- 数据库存储在本地
storage中,账号、设备之间 存在隔离;最大大小为10MB;请勿覆盖或删除key为localDB的storage,否则可能造成数据丢失 - 使用前 必须调用
db.init方法(从storage中读取保存的数据,数据量较大的时候,需要选择一个合适的时机进行载入) - 所有数据都在内存中,存取都较快,因此所有方法 均为同步方法,不返回
Promise - 所有操作 不可撤销和恢复,尤其是
remove方法需谨慎调用 - 集合名和一个集合内的
_id(可自动生成)不可重复,否则将无法创建 - 方法设置参考了云数据库的操作,关于各方法的详细信息可以直接参考 云数据库的文档
-
2020.7.9
F修复了remove后执行where可能出错的问题
-
2020.6.30
A增加or指令,可以实现多字段或查询
-
2020.5.13
U支持多字段排序(设置多个orderBy)U同时设置orderBy和skip、limit时将先进行排序再执行skip和limit
-
2020.5.9
A添加了count方法