收藏
回答

云函数 lookup 两表连接 数据库连接异常?

场景:在使用云函数lookup 进行两表连接的时候,提示数据库异常

异常信息:collection.aggregate:fail -502001 database request fail. [FailedOperation] Failed operation. Please check your request, but if the problem persists, contact us

云函数:getWorksDetailsList

// 云函数入口文件
/**
 * 获取所有用户提交的参赛作品列表
 * 区别于:getWorksDetails,当前函数查询出来的结果,会携带参赛人的信息,且是所有人的参赛作品
 */
const cloud = require('wx-server-sdk')


cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
}) // 使用当前云环境


const table = cloud.database().collection("works_details");


// 云函数入口函数
exports.main = async (event, context) => {


  return table
  .aggregate()
  .lookup({
    form: 'contestant_info',
    localField: 'openId',
    foreignField: 'openId',
    as'contestant'
  })
  .end()
  .then(res => {
    console.log(res);
    return res;
  })
  .catch(err => {
    console.log(err);
    return err;
  }) 
}


云函数调用失败,造成了上述的问题。

失败的解决过程:

1.初次使用lookup,所以,按照api中的示例做了一下,没有问题。示例地址:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/aggregate/Aggregate.lookup.html#示例

2.数据库云控制台解决脚本:

db.collection('works_details').aggregate().lookup({
from: 'contestant_info',
localField: 'openId',
foreignField: 'openId',
as:'worksList'
})
.end()
.then(res=>{
console.log(res);
})
.catch(err=>{
console.log(err);
})

查询结果正确。

3.网上搜索解决方法:

https://blog.csdn.net/wxjcode/article/details/125560127

怎么解决的没看懂。为什么添加一个索引?这个索引是根据什么来的?

既然这样,我查看了一下索引:都是 集合表名+openid_index_ 和_id_ 这两个索引。

请帮忙解决一下,这个问题。非常感谢

回答关注问题邀请回答
收藏

1 个回答

  • 点
    2023-04-21

    解决方式:

    在云函数中 将

    const table = db.cloud.collection('works_details');


    改为了

    const db = cloud.database();

    在云函数入口中,在获取table,就可以了。也不知道是什么原因导致的

    2023-04-21
    有用 1
    回复
登录 后发表内容