收藏
回答

小程序云开发查询数据库返回的值是什么样子的?

我想要在云函数里面做一些逻辑判断,但是始终获取不到Collection.get()中的值

想要在添加一条数据之前先判断数据库中是否存在,不存在则新增

但是在if那个位置一直不知道怎么去判断

cool是中间变量

我尝试着把cool stringify,但是出来的东西是空的 但是return到小程序那边又有值在里面

const cloud = require('wx-server-sdk')

cloud.init()

const db = cloud.database()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext();
  var cool = null
  try {
    console.log('openid:' + event._openid)
    cool = db.collection('user_info').where({
      _openid:event._openid
    }).get({
      success: function (res) {
        return res
      }
    });
  } catch (e) {
    console.error(e);
  }
  
  if (cool.data._openid==undefined){
    db.collection('user_info').add({
      // data 字段表示需新增的 JSON 数据
      data: {
        _openid: wxContext.OPENID,
      }
    })
    console.log("没有找到openid,新增成功")
    cool = db.collection('user_info').where({
      _openid: event._openid
    }).get({
      success: function (res) {
        return res
      }
    });
  }
  console.log("cool2str:" + JSON.stringify(cool));
  return cool
}
回答关注问题邀请回答
收藏

5 个回答

  • 121
    121
    2020-01-06
    cool = await db.collection('user_info').where({
          _openid:event._openid
        }).get();
    这样子写cool就能获取到了,数据库操作是异步的,
    还有要判断一个值是否存在,可以在where查询的时候,使用下面这个查询条件
    https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/command/Command.exists.html
    


    2020-01-06
    有用 1
    回复 3
    • 追风少年
      追风少年
      2020-01-07
      就是这个问题 谢谢啦
      2020-01-07
      回复
    • 追风少年
      追风少年
      2020-01-07
      但是这下面这个查询条件我没看懂怎么使用
      2020-01-07
      回复
    • 121
      121
      2020-01-07回复追风少年
      多看看文档,就是在where时候加条件判断,判断文档内的某个字段的值是否存在。
      2020-01-07
      回复
  • 李东bbsky
    李东bbsky
    2020-01-06

    你这写法也太混乱了...

    2020-01-06
    有用
    回复
  • 老张
    老张
    2020-01-06

    是异步的问题吧,改成同步的。

    云函数里凡是看不到await,只有success的,都会有问题。

    2020-01-06
    有用
    回复 3
    • 李东bbsky
      李东bbsky
      2020-01-06
      这是因为这是一种不同的写法,云函数端不支持回调,以及async/await和promise的then catch是不同的写法
      2020-01-06
      回复
    • 追风少年
      追风少年
      2020-01-07
      改成同步就对了 谢谢啦
      2020-01-07
      回复
    • 老张
      老张
      2020-01-07回复李东bbsky
      云函数并不是不支持回调。而是因为云函数的线程控制。
      2020-01-07
      回复
  • 无亦杨
    无亦杨
    2020-01-06

    collection.get() 的返回值是在 success 的回调函数中的:

        db.collection('user_info').where({
          _openid:event._openid
        }).get({
          success: function (res) {
            // res 中包含 get() 获取的数据
            return res
          }
        });
    


    2020-01-06
    有用
    回复 1
    • 追风少年
      追风少年
      2020-01-06
      但是我已经把值附给cool了呀?
      2020-01-06
      回复
  • 追风少年
    追风少年
    2020-01-06

    有人吗

    2020-01-06
    有用
    回复 1
    • 李东bbsky
      李东bbsky
      2020-01-06
      return就终止了执行了啊,不能这么写,写法错误
      2020-01-06
      回复
登录 后发表内容
问题标签