微信小程序本地数据库
-
复制
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 或等于 100
or
指令用于多字段或查询(默认是与查询)
// 查询 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
方法