微信小程序之云开发不能从数据库中获取数据,不是数据库权限问题!

最近写小程序感觉来了很多灵感,但在开发中还是避免不了遇到各种问题。
这次遇到的问题有点奇葩,来跟大家分享一下。

我们知道,在调用数据库的时候通常会遇到权限问题而不能够获取到数据。

在这里插入图片描述
所以在使用数据库的时候,第一件事就是要把数据库的权限给设置好了。注意其使用的一个范围。

但是问题总是在你不经意间出现,逻辑没错、权限也没错,就是获取不到数据。

在这里插入图片描述
在我的这个集合中有个字段为openID,我想通过openID来获取该条数据,数据库权限也已经改为所有用户可读。但在使用的时候就是获取不到该数据。

userlist.where({
     openID:this.data.openid
  }).get({
      success:res=>{
          console.log(res)
      }
  })

这语句没一点毛病,返回一个data数组,显示为零。

真的很郁闷,始终没有找到解决的办法。

因为在其他的集合中我也是通过相同的方法来获取的数据,只不过使用的字段不同。

在我灵光一闪,突然想到,openID既然不行,那就通过每条数据都固有的特定值来获取吧,这就是 字段 _id 。 _id 是每条数据都会有的一个特殊标志,在数据添加到数据库时自动生成的。

那么现在问题又来了,这条数据我都拿不到,我该怎样去获取这个 _id 呢?

别着急,往下我么一起探讨:

我的解决办法是,通过页面之间的数据传递,将该条信息的 _id 在其他页面获取,然后再传过来到这个页面。

拿我这个来做示例,我这个信息是用户的信息储存,在首页会有登录操作,所以我就在首页将该数据传入数据库中,是通过云函数传的。然后云函数返回一个信息里面包含这条数据的 _id ,然后我将此 _id 设置为本页面data里面的一个值,然后在通过页面跳转将该值传递到下一个页面,接着在下一个页面的onload(options)方法中的参数options中获取这个 _id 。

data:{
	_Id:''
}
wx.cloud.callFunction({    //判断是否登陆
          name:"isLogin",
          complete:res=>{
            if(res.result.data.length!=0){
              this.setData({
                _Id:res.result.data[0]._id    //获取_id
              })
                    wx.navigateTo({
                      url: '../admin/admin?&masterId='+this.data._Id      //页面跳转将_Id传到下个页面
                    })
                }
              })
            }else{
              wx.showToast({
                title: '请先登录',
                icon:'none',
                duration:1000
              })
            }
          }
        })

上面代码是通过跳转路径将值传递给下一个页面,接着我们来到下一个页面:

data:{
	_Id:''
}
onLoad: function (options) {
	console.log(options._Id)     //获取上个页面传过来的  _Id
      this.setData({
        _Id:options._Id          //再将该  _Id  设置为本页面data里面的数据值
      })
    },

通过简单的页面跳转传参,就可以轻松获取你想要的值。

然后在你想调用集合中数据的那个页面,通过_Id 来获取集合中的值,权限设置为所有用户可读,即可获取该条数据。

欢迎关注公众号【夜来疏影】

在这里插入图片描述

原创文章 99 获赞 474 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43729943/article/details/105769917