Tengo un esquema de usuario,
const userSchema = new mongoose.Schema({ name:{ type: String, required: [true, "Provide Username"], unique: true }, password: String, orders:[{seriesName: String, order:[Schema.ObjectId], _id: false}] });Quiero actualizar o modificar el subdocumento en los pedidos: si aún no hay un subdocumento con el nombre de la serie (por ejemplo, "Flash"), entonces, enviaría el nuevo documento. Si hay un subdocumento con el nombre de serie, cambiaría la matriz de orden en el subdocumento.
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); } } ) }); Todo lo que se devuelve es {"acknowledged":false} He elaborado el código para simplemente enviar un nuevo subdocumento o reemplazar el pedido en el subdocumento apropiado. Estoy sospechando, no entiendo la agregación $cond .