情形描述:用lookup联表查询,想将输出的字段 nickName 换成 inviteUserName 输出。目前我的代码如下,碰到了问题:
第一步、注释掉project聚合阶段的输出如下:
第二步:去掉project阶段的注释,这一步的输出也达到了期望,代码及日志打印如下:
第三步、想把 nickName 字段更名为 inviteUserName 输出,于是我在 project 阶段加上了一行代码,下图为代码和输出日志截图:
第四步、由于报错了,于是我尝试再加一个 project 阶段来解决问题,结果确实没有报错了,但有有新的问题出现,代码和截图如下:
最终也没有达成我的目的,大概率问题出在我对 引用「$」的使用场景理解不够,求教社区里的大佬!
可惜是图片,不能拷贝,知道也不回答了。
// 云函数入口函数
exports.main = async (event, context) => {
// 分页查出某用户所有的Pro版订阅记录
return await getProRecordList(event.pageSize, event.pageNo);
}
/** 查出某用户所有的Pro版订阅记录,注意分页请求 */
async function getProRecordList(pageSize, pageNo) {
try {
return db.collection('subscribe').aggregate()
.match({
_openid: OPENID
})
.sort({ createTime: -1})
.skip(pageSize * (pageNo - 1))
.limit(pageSize)
.lookup({
localField: "inviteUserId",
from: "user",
foreignField: "_id",
as: "userList"
})
.addFields({
inviteUser: $.arrayElemAt(['$userList', 0])
})
.addFields({
inviteUserName: '$inviteUser.nickName'
})
.project({
userList: 0,
inviteUser: 0,
inviteUserId: 0,
_openid: 0,
})
.end()
.then(res => { return res })
} catch (err) {
console.error(err)
}
}