场景:在使用云函数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_ 这两个索引。
请帮忙解决一下,这个问题。非常感谢
解决方式:
在云函数中 将
const table = db.cloud.collection('works_details');
改为了
const db = cloud.database();
在云函数入口中,在获取table,就可以了。也不知道是什么原因导致的