提交 2398cd63 编写于 作者: VK1688's avatar VK1688

Update jql.md

上级 5c93922a
......@@ -86,7 +86,8 @@ sql写法,对js工程师而言有学习成本,而且无法处理非关系型
具体看以下示例
```js
const db = uniCloud.database()
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
// 使用`jql`查询list表内`name`字段值为`hello-uni-app`的记录
db.collection('list')
......@@ -578,7 +579,8 @@ schema保存后,即使用JQL查询。查询表设为order和book这2个表名
```js
// 客户端联表查询
const db = uniCloud.database()
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
const order = db.collection('order').field('book_id,quantity').getTemp() // 临时表field方法内需要包含关联字段,否则无法建立关联关系
const book = db.collection('book').field('_id,title,author').getTemp() // 临时表field方法内需要包含关联字段,否则无法建立关联关系
db.collection(order, book) // 注意collection方法内需要传入所有用到的表名,用逗号分隔,主表需要放在第一位
......@@ -851,7 +853,8 @@ const res = await db.collection(order, 'book').where('uid==$cloudEnv_uid').get()
```js
// 客户端联表查询
const db = uniCloud.database()
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
const order = db.collection('order').field('book_id,quantity').getTemp()
const book = db.collection('book').field('_id,title as book_title,author as book_author').getTemp()
......@@ -1166,7 +1169,8 @@ db.collection(article,comment).get()
jql对查询条件进行了简化,开发者可以使用`where('a==1||b==2')`来表示字段`a等于1或字段b等于2`。如果不使用jql语法,上述条件需要写成下面这种形式
```js
const db = uniCloud.database()
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
const dbCmd = db.command
const res = await db.collection('test')
.where(
......@@ -1251,7 +1255,8 @@ where内还支持使用云端环境变量,详情参考:[云端环境变量](
使用如下写法可以筛选语文数学总分大于150的数据
```js
const db = uniCloud.database()
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
const res = await db.collection('test')
.where('add(chinese,math) > 150')
.get()
......@@ -1274,7 +1279,8 @@ res = {
例:仍以上面的数据为例,以下查询语句可以查询数学得分比语文高的记录
```js
const db = uniCloud.database()
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
const res = await db.collection('test')
.where('math > chinese')
.get()
......@@ -1312,7 +1318,8 @@ res = {
使用下面的写法可以查询deadline小于当前时间(云函数内的时间)的字段
```js
const db = uniCloud.database()
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
const res = await db.collection('test')
.where('deadline < new Date().getTime()') // 暂不支持使用Date.now(),后续会支持
.get()
......@@ -1327,7 +1334,8 @@ const res = await db.collection('test')
可以通过skip+limit来进行分页查询
```js
const db = uniCloud.database()
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
db.collection('book')
.where('status == "onsale"')
.skip(20) // 跳过前20条
......@@ -1401,7 +1409,8 @@ db.collection('order,book') // 注意collection方法内需要传入所有用到
field方法内可以不使用`{}`进行副表字段过滤,以上面示例为例可以写为
```js
const db = uniCloud.database()
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
db.collection('order,book')
.where('book_id.title == "三国演义"')
.field('book_id.title,book_id.author,quantity as order_quantity') // book_id.title、book_id.author为副表字段,使用别名时效果和上一个示例不同,请见下方说明
......@@ -1424,7 +1433,8 @@ db.collection('order,book')
```js
// 客户端联表查询
const db = uniCloud.database()
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
db.collection('book')
.where('title == "三国演义"')
.field('title as book_title,author as book_author')
......@@ -1456,7 +1466,8 @@ db.collection('book')
```js
// 客户端联表查询
const db = uniCloud.database()
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
db.collection('book')
.where('title == "三国演义"')
.field('_id as book_id,title as book_title,author as book_author')
......@@ -1489,7 +1500,8 @@ db.collection('book')
```js
// 客户端联表查询
const db = uniCloud.database()
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
db.collection('order,book')
.where('book_id.title == "三国演义"')
.field('book_id{title as book_title,author as book_author},quantity as order_quantity') // 这里联表查询book表返回book表内的title、book表内的author、order表内的quantity,并将title重命名为book_title,author重命名为book_author,quantity重命名为order_quantity
......@@ -1529,7 +1541,8 @@ db.collection('order,book')
副表字段使用别名需要注意,如果写成`.field('book_id.title as book_id.book_title,book_id.author,quantity as order_quantity')` book_title将会是由book_id下每一项的title组成的数组,这点和mongoDB内数组表现一致
```js
const db = uniCloud.database()
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
db.collection('order,book')
.where('book_id.title == "三国演义"')
.field('book_id.title as book_title,book_id.author as book_author,quantity as order_quantity') // book_id.title、book_id.author为副表字段,使用别名时效果和上一个示例不同,请见下方说明
......@@ -1640,7 +1653,8 @@ orderBy('quantity, create_date desc')
以上面的order表数据为例:
```js
const db = uniCloud.database()
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
db.collection('order')
.orderBy('quantity asc, create_date desc') // 按照quantity字段升序排序,quantity相同时按照create_date降序排序
.get()
......@@ -1651,7 +1665,8 @@ const db = uniCloud.database()
})
// 上述写法等价于
const db = uniCloud.database()
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
db.collection('order')
.orderBy('quantity','asc')
.orderBy('create_date','desc')
......@@ -1696,19 +1711,20 @@ getOne其实等价于上一节的limit(1)。
```js
// 这以上面的book表数据为例
const db = uniCloud.database()
db.collection('book')
.where({
title: '西游记'
})
.get({
getOne:true
})
.then(res => {
console.log(res);
}).catch(err => {
console.error(err)
})
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
db.collection('book')
.where({
title: '西游记'
})
.get({
getOne:true
})
.then(res => {
console.log(res);
}).catch(err => {
console.error(err)
})
```
返回结果为
......@@ -2793,14 +2809,16 @@ data中不需要包括`_id`字段,数据库会自动维护该字段。
比如在user表里新增一个叫王五的记录:
```js
const db = uniCloud.database();
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
db.collection('user').add({name:"王五"})
```
也可以批量插入数据并获取返回值
```js
const db = uniCloud.database();
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
const collection = db.collection('user');
let res = await collection.add([{
name: '张三'
......@@ -2817,7 +2835,8 @@ let res = await collection.add([{
```js
// 插入1条数据,同时判断成功失败状态
const db = uniCloud.database();
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
db.collection("user")
.add({name: '张三'})
.then((res) => {
......@@ -2858,7 +2877,8 @@ collection.doc(_id).remove()
```js
const db = uniCloud.database();
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
await db.collection("table1").doc("5f79fdb337d16d0001899566").remove()
```
......@@ -2884,7 +2904,8 @@ try {
```js
const dbCmd = db.command
const db = uniCloud.database();
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
await db.collection("table1").where({
_id: dbCmd.neq(null)
}).remove()
......@@ -2899,7 +2920,8 @@ await db.collection("table1").where({
示例:判断删除成功或失败,打印删除的记录数量
```js
const db = uniCloud.database();
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
db.collection("table1")
.where({
_id: "5f79fdb337d16d0001899566"
......@@ -2944,7 +2966,8 @@ collection.doc().update(Object data)
```js
const db = uniCloud.database();
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
let collection = db.collection("table1")
let res = await collection.where({_id:'doc-id'})
.update({
......@@ -2980,7 +3003,8 @@ let res = await collection.where({_id:'doc-id'})
更新数组时,以数组下标作为key即可,比如以下示例将数组arr内下标为1的值修改为 uniCloud
```js
const db = uniCloud.database();
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
let collection = db.collection("table1")
let res = await collection.where({_id:'doc-id'})
.update({
......@@ -3006,7 +3030,8 @@ let res = await collection.where({_id:'doc-id'})
### 批量更新文档
```js
const db = uniCloud.database();
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
let collection = db.collection("table1")
let res = await collection.where("name=='hey'").update({
age: 18,
......@@ -3087,7 +3112,8 @@ unicloud-db组件也支持使用getTemp方法,结合multiSend可以与其他
},
methods: {
test() {
const db = uniCloud.database()
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
const bannerQuery = this.$refs.udb.getTemp() // 调用模板内unicloud-db组件实例的getTemp方法
const noticeQuery = db.collection('notice').getTemp()
db.multiSend(bannerQuery, noticeQuery)
......@@ -3116,7 +3142,8 @@ JQL API支持使用聚合操作读取数据,关于聚合操作请参考[聚合
例:取status等于1的随机20条数据
```js
const db = uniCloud.database()
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
const res = await db.collection('test').aggregate()
.match({
status: 1
......@@ -3274,7 +3301,8 @@ db.collection('test').update({
**请求示例**
```js
const db = uniCloud.database()
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
const dbCmd = db.command
const $ = dbCmd.aggregate
db.collection('order')
......@@ -3423,7 +3451,8 @@ action是一种特殊的云函数,它不占用服务空间的云函数数量
```js
// 客户端发起请求,给todo表新增一行数据,同时指定action为add-todo
const db = uniCloud.database()
// 注意,此处的db是通过 uniCloud.databaseForJQL() 得到,而不是 uniCloud.database()
const db = uniCloud.databaseForJQL()
db.action('add-todo') //注意action方法是db的方法,只能跟在db后面,不能跟在collection()后面
.collection('todo')
.add({
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册