# 1、数据库API

# 调用示例在router/service/db_test/pub/目录下

# 演示页面在pages/db-test/db-test

# vk.baseDao数据库API部分调用示例展示

#

# 单条记录增加

vk.baseDao.add

let id = await vk.baseDao.add({
  dbName:"vk-test",// 表名
  dataJson:{ // 需要新增的数据 json格式
    money: Math.floor(Math.random() * 9 + 1)
  }
});
1
2
3
4
5
6

# 批量增加

vk.baseDao.adds

let ids = await vk.baseDao.adds({
  dbName:"vk-test",// 表名
  dataJson:[
    { money: Math.floor(Math.random() * 9 + 1) },
    { money: Math.floor(Math.random() * 9 + 1) }
  ]
});
1
2
3
4
5
6
7

注意: addadds 默认会自动加上 _add_time字段,该字段表示该条记录的添加时间

可以通过参数 cancelAddTime:true 来取消 _add_time 字段的添加,如下

let id = await vk.baseDao.add({
  dbName:"vk-test",
  cancelAddTime: true, // 通过设置 cancelAddTime:true 可以取消 _add_time 字段的添加
  dataJson:{ 
    money: Math.floor(Math.random() * 9 + 1)
  }
});
1
2
3
4
5
6
7

也可以通过配置 /common/uni-config-center/vk-unicloud/index.js 内的 vk.db.unicloud.cancelAddTime = true 来全局取消

提示:正常情况下,没有必要特意取消该字段,该字段记录了本条记录的实际添加时间,且该字段可以用于按时间排序(默认 vk.baseDao.getTableData 的排序规则就是按 _add_time 降序。)

#

# 批量删除

vk.baseDao.del 批量删除 对应的传统sql语句: delete from vk-test where money = 1

// 返回被删除的记录条数
await vk.baseDao.del({
  dbName:"vk-test",
  whereJson:{
    money:1
  }
});
1
2
3
4
5
6
7

# 据ID删除数据

vk.baseDao.deleteById 据ID删除数据 对应的传统sql语句: delete from vk-test where _id = 1

// 返回被删除的记录条数
await vk.baseDao.deleteById({
  dbName:"vk-test",
  id:1
});

1
2
3
4
5
6

#

# 批量修改

vk.baseDao.update 批量修改 对应的传统sql语句: update vk-test set money = money-1 where _id="5f3a14823d11c6000106ff5c" and money > 0

// 返回被修改的记录条数
let num = await vk.baseDao.update({
  dbName:"vk-test", // 表名
  whereJson:{ // 条件
    _id:"5f3a14823d11c6000106ff5c",
    money:_.gt(0)
  },
  dataJson:{ // 需要修改的数据
    money:_.inc(-1)
  }
});
1
2
3
4
5
6
7
8
9
10
11

# 根据ID修改数据

vk.baseDao.updateById 根据ID修改数据,并返回修改后的数据对象

let newInfo = await vk.baseDao.updateById({
  dbName:"vk-test",
  id:_id,
  dataJson:{
    money:1
  },
  getUpdateData:true, // 去掉getUpdateData,则不会返回修改后的数据对象
});
1
2
3
4
5
6
7
8

# 更新并返回更新后的数据(原子操作)

vk.baseDao.updateAndReturn 根据ID修改数据,并返回修改后的数据对象(原子操作)(支持事务)

# 方式一(此方式目前仅阿里云支持)

let newInfo = await vk.baseDao.updateAndReturn({
  dbName: "vk-test",
  id: _id,
  dataJson: {
    money: 1
  }
});
1
2
3
4
5
6
7

# 方式二(whereJson的条件查询后的结果必须有且只有1条记录)(此方式目前阿里云和腾讯云都支持)

let newInfo = await vk.baseDao.updateAndReturn({
  dbName: "vk-test",
  whereJson: {
    _id: _id
  },
  dataJson: {
    money: 1
  }
});
1
2
3
4
5
6
7
8
9

# vk.baseDao.updateAndReturnvk.baseDao.updateById + getUpdateData:true 的区别?

  • vk.baseDao.updateAndReturn 是原子操作,而后者不是原子操作(后者是先修改再查询)

# vk.baseDao.updateAndReturn 可以实现什么功能?

  • 1、实现id自增
  • 2、实现阅读数自增(同时返回自增后的商品或文章详细信息等)
  • 3、实现跟数值有关的自增和自减(同时需要实时获取自增或自减后的值)

#

# 根据id获取单条记录

vk.baseDao.findById 根据id获取单条记录 对应的传统sql语句: select * from vk-test where _id = "5f3a125b3d11c6000106d338"

let info = await vk.baseDao.findById({
  dbName:"vk-test",
  id:"5f3a125b3d11c6000106d338"
});

1
2
3
4
5

# 根据条件获取单条记录

vk.baseDao.findByWhereJson 根据条件获取单条记录 对应的传统sql语句: select * from vk-test where _id = "5f3a125b3d11c6000106d338"

let info = await vk.baseDao.findByWhereJson({
  dbName:"vk-test",
  whereJson:{
    _id:"5f3a125b3d11c6000106d338",
  }
});
1
2
3
4
5
6

# 查多条记录(具有分页功能)

vk.baseDao.select

查多条记录(具有分页功能) 对应的传统sql语句: `select * from vk-test where money>=0 limit 1,20

特别注意:此分页功能会随着 pageIndex 的值越大,效率越低(传统mysql也有此问题),pageIndex * pageSize 的值最好不要超过 400万(如每页显示10条,则建议最多让用户查看到第40万页)

let res = await vk.baseDao.select({
  dbName:"vk-test", // 表名
  getCount:false, // 是否需要同时查询满足条件的记录总数量,默认false
  getMain:false,// 是否只返回rows数据,默认false
  pageIndex:1, // 当前第几页
  pageSize:20, // 每页条数
  whereJson:{ // 条件
    money:_.gte(0)  // 金额大于0
  }
});
1
2
3
4
5
6
7
8
9
10

若 pageSize 设置成-1,则默认查全部数据,但由于云数据库本身有最大每次只能查500条的限制。(使用VK框架可以突破到1万条以上,联表查询时,依然为500条限制)

# 获取记录总条数

vk.baseDao.count 获取记录总条数 对应的传统sql语句: select count(*) from vk-test

let num = await vk.baseDao.count({
  dbName:"vk-test",// 表名
  whereJson:{ // 条件
    
  }
});
1
2
3
4
5
6

# 判断用户名是否存在

// 判断用户名是否存在
let num = await vk.baseDao.count({
  dbName:"uni-id-users",// 表名
  whereJson:{ // 条件
    username: "admin"
  }
});
if(num>0){
  // 用户名存在
}
1
2
3
4
5
6
7
8
9
10

# 在设置了昵称唯一时,判断此昵称是否允许修改

// 判断用户名是否存在
let uid = "当前要修改的用户的_id";
let num = await vk.baseDao.count({
  dbName:"uni-id-users",// 表名
  whereJson:{ // 条件
    _id: _.neq(uid), // 这里排除掉自己
    nickname: "我要修改的昵称"
  }
});
if(num>0){
  // 用户名存在
}
1
2
3
4
5
6
7
8
9
10
11
12

# 求和

vk.baseDao.sum sum求和 对应的传统sql语句: select sum(money) from vk-test

let sum = await vk.baseDao.sum({
  dbName:"vk-test", // 表名
  fieldName:"money", // 需要求和的字段名
  whereJson:{ // 条件
    
  }
});
1
2
3
4
5
6
7

# 取最大值

vk.baseDao.max 对应的传统sql语句: select max(money) from vk-test

let max = await vk.baseDao.max({
  dbName:"vk-test", // 表名
  fieldName:"money", // 需要求和的字段名
  whereJson:{ // 条件
    
  }
});
1
2
3
4
5
6
7

# 取最小值

vk.baseDao.min 对应的传统sql语句: select min(money) from vk-test

let min = await vk.baseDao.min({
  dbName:"vk-test", // 表名
  fieldName:"money", // 需要求和的字段名
  whereJson:{ // 条件
    
  }
});
1
2
3
4
5
6
7

# 取平均值

vk.baseDao.avg 对应的传统sql语句: select avg(money) from vk-test

let avg = await vk.baseDao.avg({
  dbName:"vk-test", // 表名
  fieldName:"money", // 需要求和的字段名
  whereJson:{ // 条件
    
  }
});
1
2
3
4
5
6
7

# 随机取N条数据

vk.baseDao.sample 随机取N条数据

let list = await vk.baseDao.sample({
  dbName:"vk-test", // 表名
  size:1, // 随机条数
  whereJson:{ // 条件
    
  }
});
1
2
3
4
5
6
7

# ...更多其他可以下载插件体验

最后修改时间: 2/18/2022, 10:49:06