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

187
Vistas
Proyecta diferentes campos basados en diferentes condiciones.

Estoy usando la agregación en MongoDB y ahora me enfrento a un problema, quiero proyectar mis campos en función de una condición que coincida o no.

Por ejemplo, tengo un campo coupon_type para el cual verificaré si su valor es igual a 1, luego proyectaré los campos ["curr_ctr", "total_coupons"] lo contrario, si su valor no es igual a 1, proyectaré los campos ["curr_ctr", "total_coupons", "curr_ctr", "coupons"].

Puedo usar dos consultas y ejecutarlas en paralelo, pero estoy tratando de lograr mi resultado usando una sola consulta.

¿Alguien puede decirme cómo puedo hacer esto en una sola consulta?

ACTUALIZAR

Mis documentos son como a continuación

 [{ "_id" : ObjectId("5878e1edf1df5a2b69bcf60e"), "curr_ctr": 12, "total_coupons":35, "coupons": ["hello", "hello2"], "coupon_type" : 1 } , { "_id" : ObjectId("5878e1eff1df5a2b69bcf60f"), "curr_ctr": 12, "total_coupons":35, "coupons": ["hello", "hello2"], "coupon_type" : 0 } , { "_id" : ObjectId("5878e1f1f1df5a2b69bcf610"), "curr_ctr": 12, "total_coupons":35, "coupons": ["hello", "hello2"], "coupon_type" : 1 } , { "_id" : ObjectId("5878e1f3f1df5a2b69bcf611"), "curr_ctr": 12, "total_coupons":35, "coupons": ["hello", "hello2"], "coupon_type" : 1 } , { "_id" : ObjectId("5878e1f5f1df5a2b69bcf612"), "curr_ctr": 12, "total_coupons":35, "coupons": ["hello", "hello2"], "coupon_type" : 11 } , { "_id" : ObjectId("5878e1f7f1df5a2b69bcf613"), "curr_ctr": 12, "total_coupons":35, "coupons": ["hello", "hello2"], "coupon_type" : 110 }, { "_id" : ObjectId("5878e1f9f1df5a2b69bcf614"), "curr_ctr": 12, "total_coupons":35, "coupons": ["hello", "hello2"], "coupon_type" : 0 } ]

Ahora, para todos los tipos de cupón iguales a 0, quiero proyectar campos ["curr_ctr", "total_coupons", "curr_ctr", "coupons"] y para todos los tipos de cupón que no sean iguales a 0, quiero proyectar campos ["curr_ctr", "total_coupons"]

ACTUALIZAR

En realidad, quiero proyectar una matriz de coupons desde el índice n hasta n+1, donde n es la entrada del usuario.

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

0

Considere que su colección contiene los siguientes documentos

 [{ "_id" : ObjectId("5878e1edf1df5a2b69bcf60e"), "coupon_type" : 1 } , { "_id" : ObjectId("5878e1eff1df5a2b69bcf60f"), "coupon_type" : 0 } , { "_id" : ObjectId("5878e1f1f1df5a2b69bcf610"), "coupon_type" : 1 } , { "_id" : ObjectId("5878e1f3f1df5a2b69bcf611"), "coupon_type" : 1 } , { "_id" : ObjectId("5878e1f5f1df5a2b69bcf612"), "coupon_type" : 11 } , { "_id" : ObjectId("5878e1f7f1df5a2b69bcf613"), "coupon_type" : 110 }, { "_id" : ObjectId("5878e1f9f1df5a2b69bcf614"), "coupon_type" : 0 } ]

Ahora necesita usar $eq en el project como:

 db.collectoin.aggregate({ "$project": { "result": { "$cond": { "if": { "$eq": ["$coupon_type", 1] }, "then": ["curr_ctr", "total_coupons"], "else": ["curr_ctr", "total_coupons", "curr_ctr", "coupons"] } } } })

Según la nueva actualización, debe modificar la consulta de esta manera:

 db.collection.aggregate({ "$project": { "result": { "$cond": { "if": { "$eq": ["$coupon_type", 1] }, "then": ["$curr_ctr", "$total_coupons", "$coupons"], "else": ["$curr_ctr", "$total_coupons"] } } } })

ACTUALIZAR

Según la nueva actualización, considere su n dada por el usuario, por ej. : var n = 1 ;

ahora la consulta será la siguiente:

 db.coupon.aggregate({ "$project": { "result": { "$cond": { "if": { "$eq": ["$coupon_type", 1] }, "then": ["$curr_ctr", "$total_coupons", { "coupons": { "$slice": ["$coupons", n, n + 1] } }], "else": ["$curr_ctr", "$total_coupons"] } } } })
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