未验证 提交 de5164cc 编写于 作者: W wanganxp 提交者: GitHub

Update cf-database.md

上级 56984f5c
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册