开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情
在使用uniCloud云数据库进行数据增删改查的时候,我们可以使用js传统方式进行操作数据库,然后uniCloud官方也推出了一款新的js操作数据库的规范,全称全称 javascript query language,也叫做JQL语法。
传统JS查询方式
const db = uniCloud.database()
let res = await db.collection('table').where({
field1: 'value1'
}).get()
为什么要用JQL语法
-
JQL大幅降低了js工程师操作数据库的难度,比SQL和传统MongoDB API更清晰、易掌握。
-
JQL支持强大的DB Schema,内置数据规则和权限。DB Schema 支持uni-id,可直接使用其角色和权限。无需再开发各种数据合法性校验和鉴权代码。
-
JQL利用json数据库的嵌套特点,极大的简化了联表查询和树查询的复杂度,并支持更加灵活的虚拟表。
查询
查询user表中name等于‘张三’的用户列表。这里where里面的name的值如果直接拼接的话要放在双引号中表示是个字符串,也可以使用变量的形式来传入,使用变量则不需要包裹双引号。
const db = uniCloud.database()
db.collection('user').where('name=="张三"').get()
联表查询与字段过滤
uni-id-user表与record表关联查询,通过userid字段进行关联,过滤出所需要的content,userid字段。
JQL提供了更简单的联表查询方案,只需在db schema中,将两个表的关联字段建立映射关系,就可以把2个表当做一个虚拟联表来直接查询。
const db = uniCloud.database()
let recordTemp = db.collection("record").field("content,userid").getTemp();
let userTemp = db.collection("uni-id-user").field("_id").getTemp();
db.collection(recordTemp, userTemp).get().then(res=> {
console.log(res);
})
新增
获取到db的表对象后,通过add方法新增数据记录。
方法:
collection.add(data)
更新
获取到db的表对象后,通过update方法新增数据记录。
方法:
collection.doc().update(Object data)
根据ID删除
方法:
collection.doc(_id).remove()
根据其他条件删除
方法:
db.collection("user").where("age>2").remove()
总结
在某些业务场景下使用JQL语法在进行操作数据库的时候还是比较好理解和方便的,也可以在云函数和云对象中进行使用,还提供了云端变量以方便直接调用。