Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

314
Vistas
MongoDB solo $búsqueda/consulta agregada para enumerar usuarios y equipos a los que el usuario asignó como miembro

Quiero escribir un ejemplo de consulta de $búsqueda User.aggregate([{ $match }]).lookup({... para enumerar usuarios con clave adicional _team donde el usuario está asignado como miembro en cualquiera del equipo. Esto es la colección mongo de ejemplo -

1ra colección

 # Users Collection - { "_id": "1", "name": "Sankhnad" }, { "_id": "2", "name": "Shweta" }

2da colección

 # Teams Collection - { "_id": "1", "name": "Rock Team", "_members": [ 2 ] }, { "_id": "2", "name": "Star Team",, "_members": [ 1, ] }, { "_id": "3", "name": "Yeh Team", "_members": [ 1, 2 ] }

Ahora quiero una única consulta de $búsqueda/agregado en la colección de users y teams para enumerar todos los usuarios y sus respectivos equipos o un usuario seleccionado y sus equipos donde el usuario ha sido asignado en _members .

El resultado esperado para todos los usuarios:

 # Output - { "_id": "1", "name": "Sankhnad", "_teams": [ { "_id": "2", "name": "Star Team",, "_members": [ 1, ] }, { "_id": "3", "name": "Yeh Team", "_members": [ 1, 2 ] } ] }, { "_id": "2", "name": "Shweta", "_teams": [ { "_id": "1", "name": "Rock Team", "_members": [ 2 ] }, { "_id": "3", "name": "Yeh Team", "_members": [ 1, 2 ] } ] }

Realmente agradezco a todos ustedes por el apoyo.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Consulta

  • la búsqueda puede funcionar en una matriz/valor único, y la búsqueda ocurre si la matriz contiene ese valor. (funciona como el operador de consulta $eq )
  • porque tiene el "_id" en la cadena y en la matriz, lo tiene como números, también se usa $toInt

Código de prueba aquí

 users.aggregate( [{"$set":{"nid":{"$toInt":"$_id"}}}, {"$lookup": {"from":"teams", "localField":"nid", "foreignField":"_members", "as":"_teams"}}, {"$unset":["nid"]}])
over 4 years ago · Santiago Trujillo Denunciar

0

Puede usar $búsqueda de la siguiente manera en la tabla de usuarios, ya que desea los equipos asociados de los usuarios.

Nota: La identificación de _members debe ser una cadena , no int32 para la búsqueda. Si no fuera una cadena, entonces es necesaria la conversión de tipo .

 db.users.aggregate([$lookup:{ from: 'teams', localField: '_id', foreignField: '_members', as: 'teams' }])

La misma consulta que utiliza la canalización de la búsqueda le gustaría

 db.users.aggregate[{ from: 'teams', let:{ids:"$_id"}, pipeline:[{ $match:{ $expr:{ $in:["$$ids","$_members"] } } }], as: '_teams' }])
over 4 years ago · Santiago Trujillo Denunciar

0

Podemos hacer algo como a continuación:

 db.users.aggregate([ {$match: {deleted: false}}, // Put condition in user collection if needed { $lookup: { from: "teams", localField: "_id", foreignField: "_members", as: "team" } }, {$unwind: { path: "$team", preserveNullAndEmptyArrays: true}}, { $project: { // To show only the records that you want "_id": 1, "name": 1, "team._id": 1, "team.name": 1, "team._members": 1 } } ]);
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda