$lookup 应该只 return 一个特定的 属性 而不是整个对象

$lookup should only return a specific property instead of whole object

我一直在尝试获取 $lookup 结果的特定字段, 我从这个开始:

$lookup: {
  from : "answers",
  localField: "_id",
  foreignField: "questionID",
  as: "usersAnswered"
} 

它 returns 是这样的:

{
        _id: "616974f1b4f67d0220fe2cf1",
        questionText: "text abc ?",
        userID: "614c7a75403a5636b4029f28",
        usersAnswered: [{
          _id: "6169635cb4f67d0220fe2aa4",
          answerText: "xyz",
          questionID: "616974f1b4f67d0220fe2cf1",
          userID: "614c7a75403a5636b4029f21"
        },{
          _id: "6169635cb4f67d0220fe2ab8",
          answerText: "lmo",
          questionID: "616974f1b4f67d0220fe2cf1",
          userID: "614c7a75403a5636b4029cc2"
        }]
      }

在这个例子中,我试图实现的是只从 usersAnswered 数组中获取 userID 而不是我真正不需要的整个对象。 它应该看起来像:

usersAnswered: [{
          userID: "614c7a75403a5636b4029f21"
        },{
          userID: "614c7a75403a5636b4029cc2"
        }]
      }

我实际上已经尝试完成它但我无法完成它所以不得不寻求一些帮助,我可以做一些类似的事情吗

$lookup: {
  from : "answers",
  localField: "_id",
  foreignField: "questionID.userID",
  as: "usersAnswered"
} 

或者关键是$unwind 之后的$group。

如果你 运行 已经 MongoDB 5.0 那么试试这个:

{
   $lookup:
      {
         from: "answers",
         localField: "_id",
         foreignField: "questionID",
         pipeline: [ {$project: {userID: 1} } ],
         as: "usersAnswered"
      }
}

否则在$lookup之后添加这个阶段:

{ $set: 
   { 
      usersAnswered: { 
         $map: { input: "$usersAnswered", in: { userID: "$$this.userID" } } 
      } 
   } 
}

{ $set: 
   { 
      usersAnswered: {$first:
         { 
         $map: { input: "$usersAnswered", in: { userID: "$$this.userID" } } 
      }
      } 
   } 
}