OnceDB扩展指令使用帮助说明:ID字段和zrangehmget指令例子
by wx_15926 on 1570244714745


在我们新建脚本时,可以直接使用oncedb对redis的扩展指令来查询数据,下面以 zrangehmget 指令说明如何直接在新建脚本中使用。

Schema中的ID字段

通过OnceDB插入的数据,都会生成一个包含所有ID的有序列表,比如下面定义了一个ousr的schema,并将name定义成了ID字段:

oncedb.schema('ousr', {
'name' : 'id;minlen(1);maxlen(16);'
, 'mail' : 'unique;minlen(1);maxlen(34);'
, 'active': 'index'
, 'regist': 'order'
, 'hobby': 'keywords("hob")'
})

然后通过 oncedb.insert/ oncedb.upsert 方法写入数据:

oncedb.insert('ousr', {
'name' : 'kris'
, 'mail' : 'c2u@live.cn'
, 'active' : '1'
, 'regist' : +new Date()
, 'hobby' : 'swim,running'
}, function(err) {

})

此时oncedb数据库中会生成一条名为 ousr:kris 的 hash 数据和一条名为 ousr 的有序数据,成员包含 kris。

zrangehmget

zrangehmget指令可以枚举ID有序数组中的ID值,将对应的hash数据查找出来,比如在OnceDoc系统中,连上本地数据库,然后查找出前十条博客文章:

//注意OnceDB文件夹引用地址,为相对于当前文件的相对路径位置
var OnceDB = require('../oncedoc/svr/oncedb')
var oncedb = OnceDB()

oncedb.init({
port : 6400
, host : ''
, auth : 'OURJSZXCVBNM<>:LKJHQWERTYUOP1234567'
, select : 1
})

var getApps = function() {
//查询title和poster两个字段
oncedb.client.zrangehmget('article', 1, 10, 'article: title poster', function(err, apps) {
console.log(err, apps)
})
}

//网络连接不稳定时,使用on绑定可能会多次触发getApps,所以这里使用once
oncedb.once('ready', getApps)
oncedb.on('error', function(err) { console.log('oncedb error', err) })

查询结果:

$ node test
null
[ { _key: 'article:jd9vh86ocn01xm97',
_score: 1570026873637,
title: 'OnceAir智能考勤管理系统,无需门禁打卡,轻松打印员工出勤表',
poster: 'dawnguard' },
{ _key: 'article:ja9598licn0107ne',
_score: 1570027680250,
title: 'OnceDoc文档管理系统使用说明',
poster: 'newghost' },
{ _key: 'article:jb8z0j46cn01z4l0',
_score: 1570028771593,
title: 'Tenda路由器如何通过端口映射,实现外网访问局域网内OnceAir顽石云盘服务器',
poster: 'dawnguard' },
{ _key: 'article:ix2u37txcn01jdt6',
_score: 1570047530469,
title: '模块安装教程:5秒为OnceDoc扩展新功能',
poster: 'newghost' },
{ _key: 'article:iu94ogr2nwkj',
_score: 1570047537709,
title: '用OnceIO(NodeJS)搭建简单的web服务器',
poster: 'dx3906' },
{ _key: 'article:j0vz0hhmcn01mlgt',
_score: 1570049121056,
title: 'OnceIO使用node-adodb从SQL数据库增添数据',
poster: 'siliviaw' },
{ _key: 'article:jbxf5acycn01dput',
_score: 1570063760522,
title: '常见路由器的默认账号密码及登陆IP一览',
poster: 'dawnguard' },
{ _key: 'article:jh1d0nnhcn01cb0l',
_score: 1570063846363,
title: '如何将iPhone手机中的图片,通过APP自动同步备份到OnceAir云盘的共享目录中',
poster: 'dawnguard' },
{ _key: 'article:j0rqre6ecn01gasj',
_score: 1570064660849,
title: 'OnceIO使用node-adodb从SQL数据库查询数据功能',
poster: 'siliviaw' },
{ _key: 'article:ivi41td7qi9l',
_score: 1570066719166,
title: 'OnceIO(Node.JS)的网页(模板)的引用与深层嵌套',
poster: 'newghost' } ]