【uniCloud】JQL语法使用入门

1,077 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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语法在进行操作数据库的时候还是比较好理解和方便的,也可以在云函数和云对象中进行使用,还提供了云端变量以方便直接调用。

image.png