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

177
Vistas
Conditional push or replace of subdocument in array

I've got a user schema,

const userSchema = new mongoose.Schema({
  name:{
    type: String,
    required: [true, "Provide Username"],
    unique: true
  },
  password: String,
  orders:[{seriesName: String, order:[Schema.ObjectId], _id: false}]
});

I want to update or upsert the subdocument in orders: If there is not already a subdocument with the seriesName (e.g. "Flash") then, I would push the new document. If there is a subdocument with the seriesName, then I would change the order array in the subdocument.

app.patch("/users/:series", (req, res)=>{
  let userName = req.body.name;
  let seriesName = req.params.series;
  let orderString = req.body.order;
  order = JSON.parse(orderString);
  let orderIDValues = [];
  order.forEach(orderIDString=>{
    orderIDValues.push(mongoose.Types.ObjectId(orderIDString))
  });
     User.updateOne(
        {name: userName},
        {$cond:{
          if: {$in: [seriesName, "$orders.seriesName"]},
             then: {"$orders.seriesName": {$in: [seriesName]},
               $set:{order: order}},
             else: {$push:{
               orders: {seriesName: seriesName, order: order}
            }}}}, (err, result)=>{
       if(!err){
         res.send(result);
       } else{
         res.send(err);
       }
     }
   )
});

All that gets returned is {"acknowledged":false} I've worked out the code to simply push a new subdocument or replace the order in the appropriate subdocument. I'm suspecting, I'm not understanding the $cond aggregation.

about 4 years ago · Juan Pablo Isaza
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