$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" } }
}
}
}
}
我一直在尝试获取 $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" } }
}
}
}
}