diff --git a/docs/uniCloud/cf-database.md b/docs/uniCloud/cf-database.md index 3be069a8584801846e25a8b210b8501ec93acfe6..0b10ba35f404d35f28107463e118b64a5a37192b 100644 --- a/docs/uniCloud/cf-database.md +++ b/docs/uniCloud/cf-database.md @@ -222,8 +222,12 @@ let res = await collection.doc('doc-id').set({ 支持 `where()`、`limit()`、`skip()`、`orderBy()`、`get()`、`field()`、`count()` 等操作。 只有当调用`get()`时才会真正发送查询请求。 - -limit不设置的情况下默认返回100条数据;设置limit有最大值,腾讯云限制为最大1000条,阿里云限制为最大500条。 + +limit,即返回记录的最大数量,默认值为100,也就是不设置limit的情况下默认返回100条数据。 + +设置limit有最大值,腾讯云限制为最大1000条,阿里云限制为最大500条。 + +如需查询更多数据,需要分页多次查询。 **get响应参数** @@ -270,64 +274,64 @@ db.collection('user').where({ name: new RegExp('^ABC') }) ``` - -**按照数组内的值查询** - -mongoDB内按照数组内的值查询可以使用多种写法,以下面的数据为例 - -```js -{ - arr:[{ - name: 'item-1', - },{ - name: 'item-2', - }] -} - -{ - arr:[{ - name: 'item-3', - },{ - name: 'item-4', - }] -} -``` - -如果想查询arr内第一个元素的name为item-1的记录可以使用如下写法 - -```js -const res = await db.collection('test').where({ - 'arr.0.name': 'item-1' -}) - -res = { - data:[{ - arr:[{ - name: 'item-1', - },{ - name: 'item-2', - }] - }] -} -``` - -如果想查询arr内某个元素的name为item-1的记录(可以是数组内的任意一条name为item-1)可以使用如下写法 - -```js -const res = await db.collection('test').where({ - 'arr.name': 'item-1' -}) - -res = { - data:[{ - arr:[{ - name: 'item-1', - },{ - name: 'item-2', - }] - }] -} -``` + +**按照数组内的值查询** + +mongoDB内按照数组内的值查询可以使用多种写法,以下面的数据为例 + +```js +{ + arr:[{ + name: 'item-1', + },{ + name: 'item-2', + }] +} + +{ + arr:[{ + name: 'item-3', + },{ + name: 'item-4', + }] +} +``` + +如果想查询arr内第一个元素的name为item-1的记录可以使用如下写法 + +```js +const res = await db.collection('test').where({ + 'arr.0.name': 'item-1' +}) + +res = { + data:[{ + arr:[{ + name: 'item-1', + },{ + name: 'item-2', + }] + }] +} +``` + +如果想查询arr内某个元素的name为item-1的记录(可以是数组内的任意一条name为item-1)可以使用如下写法 + +```js +const res = await db.collection('test').where({ + 'arr.name': 'item-1' +}) + +res = { + data:[{ + arr:[{ + name: 'item-1', + },{ + name: 'item-2', + }] + }] +} +``` ### 获取查询数量 @@ -411,10 +415,10 @@ collection.orderBy(field, orderType) ```js let res = await collection.orderBy("name", "asc").get() ``` - -**注意** - -- 排序字段存在多个重复的值时排序后的分页结果,可能会出现某条记录在上一页出现又在下一页出现的情况。这时候可以通过指定额外的排序条件比如`.orderBy("name", "asc").orderBy("_id", "asc")`来规避这种情况。 + +**注意** + +- 排序字段存在多个重复的值时排序后的分页结果,可能会出现某条记录在上一页出现又在下一页出现的情况。这时候可以通过指定额外的排序条件比如`.orderBy("name", "asc").orderBy("_id", "asc")`来规避这种情况。 ### 指定返回字段 @@ -1665,16 +1669,16 @@ db.runTransaction(callback: function, times: number) **限制** -事务操作时为保障效率和并发性,只允许进行单记录操作,不允许进行批量操作,但可以在一个事务进行多次数据库操作。 - -- 对于修改和删除仅支持使用doc方法,不支持使用where方法。 -- 新增时使用add方法一次只可以新增单条,不可新增多条,即不支持在add方法内传入数组 +事务操作时为保障效率和并发性,只允许进行单记录操作,不允许进行批量操作,但可以在一个事务进行多次数据库操作。 + +- 对于修改和删除仅支持使用doc方法,不支持使用where方法。 +- 新增时使用add方法一次只可以新增单条,不可新增多条,即不支持在add方法内传入数组 - 腾讯云没有限制where的使用,但是使用where修改或删除多条会导致无法回滚 **注意事项** - 开发者提供的事务执行函数正常返回时,uniCloud 会自动提交(`commit`)事务,请勿在事务执行函数内调用 `transaction.commit` 方法,该方法仅在通过 `db.startTransaction` 进行事务操作时使用 -- 请注意transaction.doc().get()返回的data不是数组形式 +- 请注意transaction.doc().get()返回的data不是数组形式 **示例代码** @@ -1685,9 +1689,9 @@ const db = uniCloud.database() const dbCmd = db.command exports.main = async (event) => { try { - const result = await db.runTransaction(async transaction => { - const aaaRes = await transaction.collection('account').doc('aaa').get() - const bbbRes = await transaction.collection('account').doc('bbb').get() + const result = await db.runTransaction(async transaction => { + const aaaRes = await transaction.collection('account').doc('aaa').get() + const bbbRes = await transaction.collection('account').doc('bbb').get() if(aaaRes.data && bbbRes.data) { try { const updateAAARes = await transaction.collection('account').doc('aaa').update({ @@ -1697,9 +1701,9 @@ exports.main = async (event) => { const updateBBBRes = await transaction.collection('account').doc('bbb').update({ amount: dbCmd.inc(10) }) - const aaaEndRes = await transaction.collection('account').doc('aaa').get() - if (aaaEndRes.data.amount < 0) { // 请注意transaction.doc().get()返回的data不是数组形式 - transaction.rollback(-100) + const aaaEndRes = await transaction.collection('account').doc('aaa').get() + if (aaaEndRes.data.amount < 0) { // 请注意transaction.doc().get()返回的data不是数组形式 + transaction.rollback(-100) } // 会作为 runTransaction resolve 的结果返回 return { @@ -1708,9 +1712,9 @@ exports.main = async (event) => { } catch(e) { // 会作为 runTransaction reject 的结果出去 await transaction.rollback(-100) - } - } else { - await transaction.rollback(-100) + } + } else { + await transaction.rollback(-100) } }) @@ -1746,15 +1750,15 @@ db.startTransaction() **限制** -事务操作时为保障效率和并发性,只允许进行单记录操作,不允许进行批量操作,但可以在一个事务进行多次数据库操作。 - -- 对于修改和删除仅支持使用doc方法,不支持使用where方法。 -- 新增时使用add方法一次只可以新增单条,不可新增多条,即不支持在add方法内传入数组 +事务操作时为保障效率和并发性,只允许进行单记录操作,不允许进行批量操作,但可以在一个事务进行多次数据库操作。 + +- 对于修改和删除仅支持使用doc方法,不支持使用where方法。 +- 新增时使用add方法一次只可以新增单条,不可新增多条,即不支持在add方法内传入数组 - 腾讯云没有限制where的使用,但是使用where修改或删除多条会导致无法回滚 - -**注意** - -- 请注意transaction.doc().get()返回的data不是数组形式 + +**注意** + +- 请注意transaction.doc().get()返回的data不是数组形式 **示例代码** @@ -1778,16 +1782,16 @@ exports.main = async (event) => { const updateBBBRes = await transaction.collection('account').doc('bbb').update({ amount: dbCmd.inc(10) - }) - - const aaaEndRes = await transaction.collection('account').doc('aaa').get() - if (aaaEndRes.data.amount < 0) { // 请注意transaction.doc().get()返回的data不是数组形式 + }) + + const aaaEndRes = await transaction.collection('account').doc('aaa').get() + if (aaaEndRes.data.amount < 0) { // 请注意transaction.doc().get()返回的data不是数组形式 transaction.rollback(-100) return { success: false, error: `rollback`, rollbackCode: -100, - } + } } else { await transaction.commit() console.log(`transaction succeeded`) @@ -1795,7 +1799,7 @@ exports.main = async (event) => { return { success: true, aaaAccount: aaaRes.data.amount - 10, - } + } } } else { @@ -7206,17 +7210,17 @@ let res = await db.collection('items').aggregate() ``` ### 日期操作符 - -**注意** - -- 以下日期操作符中`timezone`均支持以下几种形式 - -```js -timezone: "Asia/Shanghai" // Asia/Shanghai时区 -timezone: "+08" // utc+8时区 -timezone: "+08:30" // 时区偏移8小时30分 -timezone: "+0830" // 时区偏移8小时30分,同上 -``` + +**注意** + +- 以下日期操作符中`timezone`均支持以下几种形式 + +```js +timezone: "Asia/Shanghai" // Asia/Shanghai时区 +timezone: "+08" // utc+8时区 +timezone: "+08:30" // 时区偏移8小时30分 +timezone: "+0830" // 时区偏移8小时30分,同上 +``` #### dateFromParts