当前位置: 首页>后端>正文

unicloud云函数的学习之入门三

学习JQL语法,更方便我们使用条件语句的查询,之前的查询需要我们使用下方的代码,使用JQL可以更简便

const db = uniCloud.database()
const dbCmd = db.command
let res = await db.collection('table1').where({
  field1: dbCmd.gt(0)
}).get()
  • 补充一下退出登录的功能(一般我们都会直接把本地存储的token删除,但是在uni-id中有退出登录的方法,可以直接调用)


    unicloud云函数的学习之入门三,第1张
  • 图中的store.js中有封装的一些方法,我们可以直接使用(当然你也可以直接在那个文件中进行修改)
<template>
    <view class="content">
        <button @click="createdDb">新增</button>
        <button @click="updateDb">修改</button>
        <button @click="login">登录</button>
        <button @click="loginOut">退出登录</button>

    </view>
</template>

<script>
import { mutations } from '../../uni_modules/uni-id-pages/common/store.js'
const db = uniCloud.database();
export default {
    setup() {
        const login = ()=>{
            uni.navigateTo({
                url:'/uni_modules/uni-id-pages/pages/login/login-withpwd'
            })
        }
        const loginOut= ()=>{
            mutations.logout()
        }
        const updateDb = ()=>{
            db.collection('test').doc('646c6d6609e2989198080bd6').update({
                title:'我是修改后的数据'
            }).then(res=>{
                console.log(res);
            })
        }
        const createdDb = () => {
            db.collection('test')
                .add({
                    title:'文章333',
                    content:'我是文章内容'
                })
                .then((res) => {
                    console.log(res);
                });
        };

        return {
            createdDb,
            updateDb,
            loginOut,
            login
        };
    }
};
</script>

<style lang="scss"></style>

  • 查询的jql
    1、以前的查询(需要在对象格式里面写)
db.collection('user').where({
 id:'1111'
}).get()

2、jql的查询(可以直接写我们要查询的条件)

//先进行添加
db.collection('test')
    .add({
    title: '文章333',
    content: '我是文章内容'
    })
    .then((res) => {
      console.log(res);
    });

//查询
db.collection('test')
  .where("title=='文章333'")
  .get()
  .then((res) => {
  console.log(res);
  });

注意: 使用schema表返回状态等是定义好的,我们要是想修改怎么办呢?只能使用action云函数进行修改,相当于是axios的拦截和响应进行处理我们需要的格式

  • 先在云函数文件下新建一个文件uni.clientDB-actions,在这个文件夹下新建我们的.js文件就好,如err-msg.js
// 一个action文件示例 uni-clientDB-actions/add-todo.js
module.exports = {
  // 在数据库操作之前执行
  before: async(state,event)=>{
  
  },
  // 在数据库操作之后执行
  after:async (state,event,error,result)=>{
    // state为当前数据库操作状态其格式见下方说明
    // event为传入云函数的event对象
    // error为执行操作的错误对象,如果没有错误error的值为null
    // result为执行command返回的结果
    console.log(state,event,error,result,'actions---------');
    if(error) {
      throw error
    }
    
    if(state.collection ==='test'){//请求的表为test表,具体的实现可以使用event我们传入的值进行判断也可以
        if(!error){
            result.errMsg='查询成功'
            result.errCode=200
            return result
        }else{
            result.errMsg='查询失败'
            result.errCode=500
            return result
        }
    }
   
    
    return result
  }
}

  • 在页面中的使用,action一定要放到collection前面
//err-msg这个就是我们创建的action文件名
db.action('err-msg').collection('test')
    .where("title=='文章333'")
    get()
    .then((res) => {
      console.log(res);
    });

联表查询,上面的查询是单表查询就是单独一张表进行查询,联表查询:意思就是可以两张表或多张表进行查询,但是必须都依赖同一个主表,这样才可以进行多张一起查询

  • 下方的写法推荐使用第二种
// 直接关联多个表为虚拟联表再进行查询,旧写法,目前更推荐使用getTemp进行联表查询
const res = await db.collection('order,book').where('_id=="1"').get() // 直接关联order和book之后再过滤

// 使用getTemp先过滤处理获取临时表再联表查询,推荐用法
const order = db.collection('order').where('_id=="1"').getTemp() // 注意结尾的方法是getTemp,对order表过滤得到临时表
const res = await db.collection(order, 'book').get() // 将获取的order表的临时表和book表进行联表查询
  • 看我们的项目中,使用了uni-id-users表中的id进行关联,所以uni-id-users是主表,其他关联的都是副表
const test = db.collection('test').field('userId,title,content').getTemp()//虚拟联表
const test1 = db.collection('test1').field('userId,title,num').getTemp()
const user = db.collection('uni-id-users').field('_id,username').getTemp()
db.collection(user,test,test1).get().then(res=>{
    console.log(res);
})

注意: 上面的db.collection(test,user)。test在前就会直接返回userId为属性的将user数据包裹在里面,反之亦然,要是user在前会以_id为属性,返回的结果是不一样的

  • test在前


    unicloud云函数的学习之入门三,第2张
  • user在前


    unicloud云函数的学习之入门三,第3张
  • 这个看个人习惯,不过我喜欢将主表的放在后面,结构更清晰一些

  • 联表字段别名as

  • 将主表中的username使用别名修改为name--- username as name

const test = db.collection('test').field('title,content,userId').getTemp()//虚拟联表
            
const user = db.collection('uni-id-users').field('_id,username as name,nickname').getTemp()
db.collection(test,user).get().then(res=>{
    console.log(res);
})
unicloud云函数的学习之入门三,第4张
  • 还有查询中的方法where("add(num,price)"),具体的可以查询官方文档进行查看


    unicloud云函数的学习之入门三,第5张

https://www.xamrdz.com/backend/3h91937617.html

相关文章: