收藏
回答

云函数的数据库语句拼装问题?

为了构建一个比较灵活的数据数据库操作云函数,可以通过前端传过来的参数灵活拼装查询语句。

首先,已被注释的是现在可用的代码,但对于后续的扩展性还不够好,比如增加排序等参数。

我尝试用以下方法来拼装,打印GET可以看到doc、field等条件已经设置了。

但返回get结果时,发现条件无效,返回的是数据库全部的数据。

不知道什么原因?各位大佬是否有解决办法,谢谢。

// 查询
async function get(event) {
 
  // 获得数据
  const {
    collection,
    doc,
    where,
    fields
  } = event || null
 
  // // 查询并返回(已测试此代码没有问题)
  // if (doc) {
  //   const GET = await db.collection(collection).doc(doc).field(fields ? fields : {}).get()
  //   return GET
  // } else {
  //   const GET = await db.collection(collection).where(where).field(fields ? fields : {}).get()
  //   return GET
  // }
 
  // 声明查询(尝试用拼装方式)
  let GET = db.collection(collection)
 
  // 查询条件是doc或where
  doc ? GET.doc = doc : GET.where = where
  // 是否指定返回字段
  fields ? GET.field = fields : null
  // 开始查询
  GET = await GET.get()
  // 返回
  return GET
 
}
回答关注问题邀请回答
收藏

1 个回答

  • 老张
    老张
    2021-09-18

    1、含有command的where不能从前端传入。

    2、你参数写死调试呗。

    2021-09-18
    有用
    回复 2
    • 唐同学
      唐同学
      2021-09-18
      command我的考虑有两方面,一是用递归遍历替换关键字为command;二是这个是一般通用函数,需要command的在写单独的函数。


      第二点“你参数写死调试呗。”我不了解你的意思,可否具体点。


      谢谢
      2021-09-18
      回复
    • 老张
      老张
      2021-09-18回复唐同学
      费那么劲为啥呢?数据库权限改成自定义,update在小程序端执行,不香么?
      2021-09-18
      回复
登录 后发表内容