提交 3010fc6b 编写于 作者: 雪洛's avatar 雪洛

Merge branch 'pr_78'

......@@ -2001,29 +2001,29 @@ db.collection('scores').aggregate()
- 聚合操作实例仅用于查询,不可执行增删改操作。在聚合操作实例上只能使用聚合操作方法,不能使用where/orderBy等基础方法,where需改为match,orderBy应使用sort实现,细节请阅读下方聚合操作文档。
- 聚合操作在大数据量下性能不如简单查询,请根据自身业务选择合适的用法
云函数中使用时切勿复用aggregate实例,容易引发Bug。
云函数中使用时切勿复用aggregate实例,容易引发Bug。
以下两种写法均为错误示例:
```js
const db = uniCloud.database()
const collection = db.collection('test')
const aggregate = collection.aggregate() // 云函数实例复用时,此聚合实例也会复用,导致Bug
exports.main = async function(){
const res = await aggregate.match({a:1}).end()
return {res}
}
```
```js
const db = uniCloud.database()
const collection = db.collection('test')
exports.main = async function(){
const aggregate = collection.aggregate() // 此聚合实例分别在两个请求内使用,导致Bug
const res1 = await aggregate.match({a:1}).end()
const res2 = await aggregate.match({a:2}).end()
return {res1, res2}
}
```js
const db = uniCloud.database()
const collection = db.collection('test')
const aggregate = collection.aggregate() // 云函数实例复用时,此聚合实例也会复用,导致Bug
exports.main = async function(){
const res = await aggregate.match({a:1}).end()
return {res}
}
```
```js
const db = uniCloud.database()
const collection = db.collection('test')
exports.main = async function(){
const aggregate = collection.aggregate() // 此聚合实例分别在两个请求内使用,导致Bug
const res1 = await aggregate.match({a:1}).end()
const res2 = await aggregate.match({a:2}).end()
return {res1, res2}
}
```
### 聚合表达式@aggregate-expression
......@@ -3396,34 +3396,35 @@ let res = await db.collection('orders').aggregate()
如需orders关联books,book再关联authors查询,可以在pipeline内再使用lookup
```js
const db = cloud.database()
const $ = db.command.aggregate
let res = await db.collection('orders').aggregate()
.lookup({
from: 'books',
let: {
book_id: '$book'
},
pipeline: $.pipeline()
.match(
$.expr($.eq(['$_id', '$$book_id']))
)
.lookup({
from: 'authors',
let: {
author_id: '$author'
},
pipeline: $.pipeline()
.match(
$.expr($.eq(['$_id', '$$author_id']))
)
.done(),
as: 'authorList'
})
.done(),
as: 'bookList',
})
.end()
const db = cloud.database()
const dbCmd = db.command
const $ = db.command.aggregate
let res = await db.collection('orders').aggregate()
.lookup({
from: 'books',
let: {
book_id: '$book'
},
pipeline: $.pipeline()
.match(
dbCmd.expr($.eq(['$_id', '$$book_id']))
)
.lookup({
from: 'authors',
let: {
author_id: '$author'
},
pipeline: $.pipeline()
.match(
dbCmd.expr($.eq(['$_id', '$$author_id']))
)
.done(),
as: 'authorList'
})
.done(),
as: 'bookList',
})
.end()
```
......@@ -5312,9 +5313,9 @@ let res = await db.collection('todos').doc('doc-id').update({
#### abs
<!--
/// meta
keyword: abs,绝对值
<!--
/// meta
keyword: abs,绝对值
-->
返回一个数字的绝对值。
......@@ -5366,9 +5367,9 @@ let res = await db.collection('ratings').aggregate()
#### add
<!--
/// meta
keyword: 相加,add,日期
<!--
/// meta
keyword: 相加,add,日期
-->
将数字相加或将数字加在日期上。如果数组中的其中一个值是日期,那么其他值将被视为毫秒数加在该日期上。
......@@ -9536,9 +9537,9 @@ let res = await db
#### avg
<!--
/// meta
keyword: 均值
<!--
/// meta
keyword: 均值
-->
返回一组集合中,指定字段对应数据的平均值。
......@@ -9934,9 +9935,9 @@ let res = await db.collection('students').aggregate()
#### sum
<!--
/// meta
keyword: 求和
<!--
/// meta
keyword: 求和
-->
计算并且返回一组字段所有数值的总和。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册