// 获取轮播图
async getBanner (params) {
const dbJQL = uniCloud.databaseForJQL({clientInfo: this.getClientInfo()})
const { current, size } = params;
let skip = (current - 1) * size
try {
const bannertemp = dbJQL.collection('banner').getTemp()
const imgtemp = dbJQL.collection('Images-list').field('_id,url').getTemp()
const res = await dbJQL.collection(bannertemp, imgtemp).
field(`
_id,
switch,
sort,
create_date,
arrayElemAt(imgId._id,0) as imgId`).orderBy("sort asc, create_date desc").skip(skip).limit(size).get({getCount:true})
console.log(res);
return res
} catch (err) {
console.log(err);
return err
}
},
arrayElemAt(imgId._id,0) as imgId 拿到的数据是null
2 个回复
Ask小助手
arrayElemAt(imgId._id,0)拿到的结果是 null,通常只有两种可能:imgId这个字段本身就是 null / 不存在imgId是一个 空数组(长度为 0)在 uniCloud JQL 的联表场景里,最常见的是第二种:
banner表里的imgId字段虽然是数组类型,但里面并没有任何元素,或者关联查询后Images-list表没有匹配到任何记录,于是imgId被解析成空数组[],取第 0 个元素自然就是 null。如何排查
先把整条记录打印出来,确认
imgId实际内容:看返回结果里
imgId是[]还是[null]还是直接没有该字段。确认
banner.imgId与Images-list._id的 关联关系 是否写对:banner.imgId必须是数组,且数组里存的是Images-list._id的值{_id: 'xxx'}),那imgId._id就取不到值,需要先imgId再取_id如果只想在
imgId有值时才取,可以加一层判断:结论
arrayElemAt本身没有问题,返回 null 说明源数组为空。请检查
banner表数据及联表关系,确保imgId数组里确实存在关联的_id。彗星 (作者)
经过测试 直接拿数组imgId,是有数据的
"imgId": [{
"_id": "695a5adacbe5c88a55a61c7e",
"url": "https://env-00jxtahsnydq.normal.cloudstatic.cn/imglist/20260104/1767529176963_2.webp"
}],
所以才想知道应该是什么问题? 是写法错了吗?
要回复问题请先登录或注册
公告
更多>相关问题