许多人遇到不能更新云数据库字段的问题,这里说明一下

需要更细节的了解权限请阅读
微信官方文档-数据库安全规则

首先需要明白,云数据的角色只有两种,一种是所有用户,一种是创建者,这里的创建者更多指的是记录的创建者而不是集合的创建者

记录指的是
在这里插入图片描述

所以权限的限制就这这两个角色上,接下来使用实验来说明
在这里插入图片描述

<input placeholder="填写要更新的id" bindinput="updateInput"></input>
<input placeholder="填写更新后的名字" bindinput="updateName"></input>
<button bindtap="updateData">更新数据</button>
<button bindtap="getData">查询数据</button>
<input placeholder="输入名字" bindinput="addName"></input>
<input placeholder="输入年龄" bindinput="addAge"></input>
<button bindtap="addData">添加数据</button>
const DB =wx.cloud.database().collection('test');
let updateID,updateName,name,age
Page({
//要更新的ID
  updateInput(event) {
    console.log("要更新的id", event.detail.value);
    updateID = event.detail.value;
  },
  //更新后的名字
  updateName(event) {
    console.log("要更新的name", event.detail.value);
    updateName = event.detail.value;
  },
  //更新数据
  updateData() {
    DB.doc(updateID).update({
      // data 传入需要局部更新的数据
      data: {
        // 表示将 done 字段置为 true
        name: updateName
      },
      success: function (res) {
        console.log("修改成功", res)
      },
      fail:console.error
    })
  },
  //查询数据
  getData() {
    DB.get({
      success(res) {
        console.log("查询成功", res)
      },
      fail:console.error
    })
  },
  //添加Name
  addName(event) {
    name = event.detail.value;
  },
  //添加Age
  addAge(event) {
    age = event.detail.value;
  },

  //添加数据
  addData() {
    DB.add({
      data: {
        name: name,
        age: age
      },
      success(res) {
        console.log("成功", res);
      },
      fail(res) {
        console.log("失败", res);
      }
    })
  }
})

在控制台手动创建test集合并添加一条记录
在这里插入图片描述
由小程序创建一条记录
在这里插入图片描述
在这里插入图片描述

可以看出小程序创建的记录中自动添加了_openid字段,那么这个字段的用处是什么呢

当前集合的权限是仅创建者课读写
在这里插入图片描述
在小程序中点击查询
在这里插入图片描述

可以看到只显示了刚才通过小程序创建的带有_openid字段的记录

在小程序中尝试修改由控制台创建的记录
在这里插入图片描述

可以看到没有记录被更新

在小程序中尝试修改小程序创建的记录
在这里插入图片描述
在这里插入图片描述

可以看到修改成功了

所以应该怎样修改没有_openid字段或者_openid并不是当前用户的记录呢?解决方法是修改权限让所有用户这个角色可读可写

所有用户可读
在这里插入图片描述
再次查询发现两条记录都可以看到
在这里插入图片描述
所有用户可写,但不可读
在这里插入图片描述
再次查询时
在这里插入图片描述
修改控制台创建的记录
在这里插入图片描述
在这里插入图片描述

修改小程序创建的记录
在这里插入图片描述
在这里插入图片描述
所有用户可读可写的自定义权限

{
  "read": true,
  "write": true
}

自定义权限就不讲了,可以看看文章开头的官方文档

如果不想因为权限问题发愁也可以使用云函数或后台的方式来调用数据库
在这里插入图片描述

如果还有问题可以评论区留言

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐