Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

302
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!