diff --git a/docs/uniCloud/cf-database.md b/docs/uniCloud/cf-database.md index 2b4b139dd6b29c0b2f7f20744db96fd7c3a95c49..f4c6c1fe3d02f0bb137b1e5dff229463f8b111c4 100644 --- a/docs/uniCloud/cf-database.md +++ b/docs/uniCloud/cf-database.md @@ -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 - 返回一个数字的绝对值。 @@ -5366,9 +5367,9 @@ let res = await db.collection('ratings').aggregate() #### add - 将数字相加或将数字加在日期上。如果数组中的其中一个值是日期,那么其他值将被视为毫秒数加在该日期上。 @@ -9536,9 +9537,9 @@ let res = await db #### avg - 返回一组集合中,指定字段对应数据的平均值。 @@ -9934,9 +9935,9 @@ let res = await db.collection('students').aggregate() #### sum - 计算并且返回一组字段所有数值的总和。