$lookup debería devolver solo una propiedad específica en lugar de todo el objeto.
He estado intentando obtener un campo específico del resultado de $lookup,
Comienzo con esto:
$lookup: {
from : "answers",
localField: "_id",
foreignField: "questionID",
as: "usersAnswered"
}
devuelve algo como esto:
{
_id: "616974f1b4f67d0220fe2cf1",
questionText: "texto abc ?",
userID: "614c7a75403a5636b4029f28",
usersAnswered: [{
_id: "6169635cb4f67d0220fe2aa4",
answerText: "xyz",
questionID: "616974f1b4f67d0220fe2cf1",
userID: "614c7a75403a5636b4029f21"
},{
_id: "6169635cb4f67d0220fe2ab8",
answerText: "lmo",
questionID: "616974f1b4f67d0220fe2cf1",
userID: "614c7a75403a5636b4029cc2"
}]
}
En este ejemplo, lo que estoy intentando lograr es obtener solo el userID
del array usersAnswered
en lugar del objeto completo que realmente no necesito.
Debería verse así:
usersAnswered: [{
userID: "614c7a75403a5636b4029f21"
},{
userID: "614c7a75403a5636b4029cc2"
}]
}
En realidad, he intentado hacerlo pero no pude lograrlo, así que tuve que pedir ayuda ¿podría hacer algo como?
$lookup: {
from : "answers",
localField: "_id",
foreignField: "questionID.userID",
as: "usersAnswered"
}
O tal vez la clave esté en $group después de $unwind.
davy.ai
Para lograr el resultado deseado de obtener solo el campo
userID
del resultado de$lookup
, puedes usar la etapa$project
después de la etapa$lookup
en el pipeline de agregación. Aquí tienes un ejemplo:La etapa
$project
solo incluirá el campouserID
del arrayusersAnswered
en el resultado final.En cuanto a tus otros intentos, usar
foreignField: "questionID.userID"
no es una sintaxis válida, ya queforeignField
solo debe hacer referencia a un campo en la colecciónanswers
. Y sí, también podrías usar$group
después de$unwind
para lograr el resultado deseado, pero sería menos eficiente que usar$project
.