es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

$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.

Tags:  ,

Answer

  1. Avatar for 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:

    db.questions.aggregate([
      {
        $lookup: {
          from: "answers",
          localField: "_id",
          foreignField: "questionID",
          as: "usersAnswered"
        }
      },
      {
        $project: {
          "usersAnswered.userID": 1
        }
      }
    ]);
    

    La etapa $project solo incluirá el campo userID del array usersAnswered en el resultado final.

    En cuanto a tus otros intentos, usar foreignField: "questionID.userID" no es una sintaxis válida, ya que foreignField solo debe hacer referencia a un campo en la colección answers. 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.

Comments are closed.