09月30, 2019

微信小程序端无法查询云开发数据库中数据

一、背景介绍

最近在使用云开发开发小程序应用,使用到了数据库来存储数据。

需要用户来提交数据,这个数据只能用户读写,其他人没有权限。

故数据库权限设置为“仅创建者可读写”

由于需要标识是每条记录属于哪个用户,故添加 openid 字段。

二、问题现象

数据存储没有问题,存储完成之后需要在小程序端读取用户的数据。

  const db = wx.cloud.database()

  db.collection('my_trip').where({
    openid: 'o4uwQ0aPNN3KYj8fip1DpAM7SmuQ'
  }).get().then(res => {
    console.log(res)
  })

这个时候问题,无论怎么查询都无法获取数据,返回结果为空。

此时怀疑是代码有错误,将查询条件贴入云开发控制台,执行之后发现没有问题。

三、 解决问题

在反复确认代码没有问题之后,想到了查询文档。

在 文档的数据库权限管理一节 发现了如下内容:

初期我们对操作数据库开放以下几种权限配置,每个集合可以拥有一种权限配置,权限配置的规则是作用在集合的每个记录上的。出于易用性和安全性的考虑,云开发为云数据库做了小程序深度整合,在小程序中创建的每个数据库记录都会带有该记录创建者(即小程序用户)的信息,以 _openid 字段保存用户的 openid 在每个相应用户创建的记录中。因此,权限控制也相应围绕着一个用户是否应该拥有权限操作其他用户创建的数据展开。

可以看到通过小程序创建的数据库记录都需要用 _openid 字段来保存用户的 openid 信息。

遂将数据库中 openid 字段改成 _openid ,重新查询发现没有问题了。

本文链接:http://blog.guansixu.cn/post/wxapp-sql-openid.html

-- EOF --

Comments