m-6ren">
gpt4 book ai didi

javascript - "$lookup with ' 管道 ' may not specify ' 本地字段 ' or ' 国外字段 '"

转载 作者:行者123 更新时间:2023-12-05 00:30:15 27 4
gpt4 key购买 nike

我是 mongoose 和 mongoDB 的新手,我有以下查询,运行时会引发以下错误。如果有人可以帮助我处理问题并且仍然获得相同的输出,那就太好了

//interview.model.js => mongodb show name as interview
module.exports = mongoose.model('Interview', interviewSchema);
//candidate.model.js => mongodb show name as candidate
module.exports = mongoose.model('Candidate', candidateSchema);

const [result, err] = await of(Interview.aggregate([
{
$match: {
...filterQuery,
}
},
{
$lookup: {
'from': 'candidates',
'localField': 'candidateId',
'foreignField': '_id',
'as': 'candidateId',
pipeline: [
{ $match: { 'candidateId.interviewCount': 0 }},
{ $project: { firstName:1, status:1, avatar:1 } }
]
}
},
]))

最佳答案

MongoDB 4.4 or below versions :
您可以使用 $lookup 的任何一种语法。来自 1) localField/ForeignField 或 2) 使用管道查找,

  • let声明变量candidateId您可以在 pipeline 中使用此 ID , 即称为 localField
  • pipeline使用 $expr 推送表达式匹配和 $eq因为我们正在匹配内部字段
  • $$引用将允许在声明为 let 的管道中使用变量
  • const [result, err] = await of(Interview.aggregate([
    { $match: { ...filterQuery } },
    {
    $lookup: {
    'from': 'candidates',
    'as': 'candidateId',
    'let': { candidateId: "$candidateId" },
    'pipeline': [
    {
    $match: {
    $expr: { $eq: ["$$candidateId", "$_id"] },
    'candidateId.interviewCount': 0
    }
    },
    { $project: { firstName:1, status:1, avatar:1 } }
    ]
    }
    }
    ]))
    MongoDB 5.0 or above versions :
    根据最新版本的 mongodb,您查询看起来不错,您可以将 mongodb 版本升级到 mongodb 最新版本。

    关于javascript - "$lookup with ' 管道 ' may not specify ' 本地字段 ' or ' 国外字段 '",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66748716/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com