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

231
Vistas
Tubería de agregación de mongoose: comparación con el objeto propio

Tengo un objeto de mangosta de muestra que se ve así:

 { _id: 5fa849ad4f6be0382363809c, ratings: { ratedPersonId: 7, rating: 7, timeSpent: 30, timestamp: 78, userThreshold: 5 } },

contiene un _id y una lista de calificaciones que es un subdocumento con las siguientes características.

He creado una tubería de agregación como esta:

 const ratedUser = await this.ratingModel .aggregate([ { $project: { ratings: 1 } }, { $unwind: '$ratings' }, { $match: { $and: [{ 'ratings.ratedPersonId': userId }, { 'ratings.rating': { $gte: 5 } }], }, }, ]) .exec()

Esto funciona para las calificaciones de la primera condición.ratedPersonId ratings.ratedPersonId: userId

Mi problema es que mi segunda condición es que la calificación debe ser mayor o igual que el campo userThreshold de usuario en el mismo objeto.

cada vez que escribo eso en la consulta no devuelve nada

 $and: [{ 'ratings.ratedPersonId': userId }, { 'ratings.rating': { $gte: 'ratings.threshold'} }],
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Demostración: https://mongoplayground.net/p/AQMsJGkoFcu

Use $expr para comparar los campos

Leer expresiones de agregación

$expr puede crear expresiones de consulta que comparen campos del mismo documento en una etapa de $match. Si la etapa $match es parte de una etapa $lookup, $expr puede comparar campos usando variables let. Consulte Especificar varias condiciones de unión con $lookup para ver un ejemplo. $expr solo usa índices en la colección para coincidencias de igualdad en una etapa de $match. $expr no admite índices multiclave.

 db.collection.aggregate([ { $project: { ratings: 1 } }, { $unwind: "$ratings" }, { $match: { $and: [ { "ratings.ratedPersonId": 7 }, { $expr: { $gte: [ "$ratings.rating", "$ratings.userThreshold" ] } } ], }, }, ])
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