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

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

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 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!