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

173
Vistas
Consulta de agregación compleja con cláusula in de matriz de documentos

A continuación se muestra el modelo de datos MongoDB de muestra para una colección de user :

 { "_id": ObjectId('58842568c706f50f5c1de662'), "userId": "123455", "user_name":"Bob" "interestedTags": [ "music", "cricket", "hiking", "F1", "Mobile", "racing" ], "listFriends": [ "123456", "123457", "123458" ] }

listFriends es una matriz de userId de usuario para otros usuarios

Para un ID de userId en particular, necesito extraer los amigos de la listFriends ( userId de usuario) y para esos userId de usuario, necesito agregar las etiquetas interestedTags y su recuento.

Podría lograr esto dividiendo la consulta en dos partes:

1.) Extraiga la lista de listFriends para un ID de usuario en userId ,

2.) Use esta lista en una función de aggregate() , algo como esto

 db.user.aggregate([ { $match: { userId: { $in: [ "123456","123457","123458" ] } } }, { $unwind: '$interestedTags' }, { $group: { _id: '$interestedTags', countTags: { $sum : 1 } } } ])

Estoy tratando de resolver la pregunta: ¿Hay alguna manera de lograr la funcionalidad anterior (ambos pasos 1 y 2) en una sola función agregada?

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

0

Podrías usar $lookup para buscar documentos de amigos. Esta etapa generalmente se usa para unir dos colecciones diferentes, pero también puede unirse en una sola colección, en su caso creo que debería estar bien:

 db.user.aggregate([{ $match: { _id: 'user1', } }, { $unwind: '$listFriends', }, { $lookup: { from: 'user', localField: 'listFriends', foreignField: '_id', as: 'friend', } }, { $project: { friend: { $arrayElemAt: ['$friend', 0] } } }, { $unwind: '$friend.interestedTags' }, { $group: { _id: '$friend.interestedTags', count: { $sum: 1 } } }]);

Nota: utilizo $lookup y $arrayElemAt , que solo están disponibles en Mongo 3.2 o una versión más reciente, así que verifique su versión de Mongo antes de usar esta canalización.

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