【unicloud】JQL语法在客户端、云端函数、云端对象中的使用

在云函数内通过传统api操作数据库:(143条消息) uniCloud增删改查-好文_阿晨学前端的博客-CSDN博客

 JQL,是一种js方式操作数据库的规范,方便与多表联查,它避免了使用db.command进行复杂操作,下面举两个个例子:

//db.command 使用
const dbCmd = db.command 
db.collection('goods').where({
  category: 'computer',
  memory: dbCmd.gt(8), // 表示大于 8

})

//JQL使用
db.collection('goods').where(`category == 'computer' && memory > 8`)
//command 使用
const db = uniCloud.database();
exports.main = async (event, context) => {
  //field => 只返回age字段、_id字段,其他字段不返回
  const collection = await db.collection('users').field({ 'name': true }).get()
  return collection
};

//JQL使用
exports.main = async (event, context) => {
  const collection = await db.collection('users').field('name,_id').get()
  return collection
};

客服端使用JQL语法:

JQL提供了更简单的联表查询方案,只需在db schema中,将两个表的关联字段建立映射关系,就可以把2个表当做一个虚拟联表来直接查询

const db = uniCloud.database()
// 临时表field方法内需要包含关联字段,否则无法建立关联关系
const order = db.collection('order').field('book_id,quantity').getTemp() 
// 临时表field方法内需要包含关联字段,否则无法建立关联关系
const book = db.collection('book').field('_id,title,author').getTemp() 
// 注意collection方法内需要传入所有用到的表名,用逗号分隔,主表需要放在第一位
db.collection(order, book)
  .where('book_id.title == "三国演义"') // 查询order表内书名为“三国演义”的订单
  .get()
  .then(res => {
    console.log(res);
  }).catch(err => {
    console.error(err)
  })

云函数中使用JQL语法:

exports.main = async (event, context) => {
   // 获取JQL database引用,此处需要传入云函数的event和context,必传
	const dbJQL = uniCloud.databaseForJQL({ 
		event,
		context 
	})
   // 直接执行数据库操作
	const bookQueryRes = await dbJQL.collection('book').where("name=='三国演义'").get() 
	return {
		bookQueryRes
	}
};

云对象中使用JQL语法:

module.exports = {
  // 通用预处理器
  _before: function() { 
    const dbJQL = uniCloud.databaseForJQL({
	   clientInfo: this.getClientInfo()
	})
  },
  async get() {
    // 直接执行数据库操作
	const bookQueryRes = await dbJQL.collection('book').where("name=='三国演义'").get() 
	return {
		bookQueryRes
	}
  }
}

setUser指定用户身份

如需在云函数/云对象中指定执行其他用户身份,需使用setUser方法

// 指定后续执行操作的用户信息,此虚拟用户将同时拥有传入的uid、role、permission
dbJQL.setUser({
  uid: 'user-id', // 用户id
  // 指定当前执行用户的角色为admin。如果只希望指定为admin身份,可以删除uid和permission字段
  role: ['admin'],
  permission: [] // 用户权限
})

PS:clientDB无论如何不可访问password类型字段,不管schema的权限如何,这类数据不传输到客户端。云函数内可以访问password类型字段,但受schema配置的权限约束

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来自湖南的阿晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值