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

105
Vistas
Encuentre dónde la propiedad del objeto en la matriz es más grande que la propiedad en otro objeto

Trato de encontrar documentos donde la tasa de propiedad en el objeto es mayor que la tasa de propiedad en otro objeto (ambos están en la misma matriz)

Documento de ejemplo:

 { "rates": [ { "name": "x", "rate": 5 }, { "name": "y", "rate": 4 } ] }

Así es como lo intenté:

 db.ratesCollection.find({ $where: {"rates": { $elemMatch: {name: "x", "rate"}}} > {"rates": { $elemMatch: {name: "y", "rate"}}} }).pretty()

El problema es que no sé cómo comparar valores cuando primero necesito encontrar un objeto en una matriz.

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

0

Puede usar $reduce para procesar la matriz y obtener x_rate y y_rate . Después de eso, compare los 2 valores para obtener el resultado.

 db.collection.aggregate([ { "$addFields": { "x_rate": { "$reduce": { "input": "$rates", "initialValue": null, "in": { $cond: [ { $eq: [ "$$this.name", "x" ] }, "$$this.rate", "$$value" ] } } }, "y_rate": { "$reduce": { "input": "$rates", "initialValue": null, "in": { $cond: [ { $eq: [ "$$this.name", "y" ] }, "$$this.rate", "$$value" ] } } } } }, { $match: { $expr: { $gt: [ "$x_rate", "$y_rate" ] } } }, { "$project": { x_rate: false, y_rate: false } } ])

Aquí está el parque infantil de Mongo para su referencia.

over 4 years ago · Santiago Trujillo Denunciar

0

Consulta

  • x>y <=> xy > 0
  • reducir para encontrar el xy y comprobar si es mayor que 0
  • value=0 si encontramos x sumamos si encontramos y restamos, de lo contrario mantenemos el valor como está

Código de prueba aquí

 aggregate( [{"$match": {"$expr": {"$gt": [{"$reduce": {"input":"$rates", "initialValue":0, "in": {"$switch": {"branches": [{"case":{"$eq":["$$this.name", "x"]}, "then":{"$add":["$$value", "$$this.rate"]}}, {"case":{"$eq":["$$this.name", "y"]}, "then":{"$subtract":["$$value", "$$this.rate"]}}], "default":"$$value"}}}}, 0]}}}])
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