我有两个mongoDB集合,一个是Jobs
,另一个是savedJob
,我想获取作业的详细信息以及savedJob
集合上的作业ID,但是mongoDb $lookup聚合返回一个空数组。
首先,我从savedJob
集合中查询保存的作业数据,因此我通过用户ID方法id($match)查询保存的作业文档,并使用此管道从Job
集合中获取作业详细信息数据。
查询代码为
const { userId } = req?.params;
const pipeline = [
{
$match: {
userId: userId,
},
},
{
$lookup: {
from: "Jobs",
localField: "jobId",
foreignField: "_id",
as: "jobDetails",
},
},
];
const savedJobsWithJobDetails = await saveJob.aggregate(pipeline);
console.log(savedJobsWithJobDetails);
代码在MongoDB Playground中运行良好,但在我的express服务器中,它返回一个空数组,我使用Mongoose 6.0.1。
保存的作业文档如下所示:
工作文件看起来像这样:
我检查了所有的模型名和字段名,但它返回一个空数组
1条答案
按热度按时间7lrncoxx1#
我想你只是打错了。变更:
到
你的
$lookup
(请注意这些工作)。您还需要将
jobId
从savejobs
模式转换为ObjectId
,因为此时您正在尝试查找目标id存储为ObjectId
的字符串。这可以通过一个简单的
$addFields
管道步骤来完成,专门利用$toObjectId
来帮助您查找,如下所示: