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

Update jql.md

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