Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

634
Visualizações
¿Cómo usar $ cond en updateOne usando mongoose?

Quiero actualizar un valor en mongodb dependiendo de su valor anterior, si es null (guardado como cadena), lo actualizaré a un nuevo valor, de lo contrario, quiero mantenerlo como está.
Aquí está mi código:

 User.updateOne({_id: user._id}, {$set: { deviceId: {$cond: [{$eq: ['null']}, req.body.deviceId, 'null']} }}, null, function (err, res){ if (err){ return done(err) }else{ return done(null, user) } })

Pero me sale el siguiente error (creo que indica que mi sintaxis no es correcta):

 CastError: Cast to string failed for value "{ '$cond': [ { '$eq': [Array] }, 'MYDEVICEID', 'null' ] }" (type Object) at path "deviceId" at model.Query.exec (D:\X_APP\XAPP_BACKEND\node_modules\mongoose\lib\query.js:4478:21) at _update (D:\X_APP\XAPP_BACKEND\node_modules\mongoose\lib\query.js:4330:11) at model.Query.Query.updateOne (D:\X_APP\XAPP_BACKEND\node_modules\mongoose\lib\query.js:4229:10) at _update (D:\X_APP\XAPP_BACKEND\node_modules\mongoose\lib\model.js:3834:16) at Function.updateOne (D:\X_APP\XAPP_BACKEND\node_modules\mongoose\lib\model.js:3770:10) at file:///D:/X_APP/XAPP_BACKEND/middlewares/userMiddleware.js:24:32 at processTicksAndRejections (internal/process/task_queues.js:95:5)

Busqué y vi muchas aplicaciones usando la Agregación, pero ¿es posible lograrlo usando mi enfoque updateOne en mongoose? En caso afirmativo, ¿cuál es el problema con mi solicitud?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

El $cond es un operador de agregación que no puede usar en una consulta de actualización simple,

si es nulo (guardado como cadena), lo actualizaré a un nuevo valor; de lo contrario, quiero mantenerlo como está.

Si está intentando actualizar un solo campo, sugeriría un enfoque simple,

Puede verificar la condición en la parte de consulta si deviceId es nulo y luego actualizar el nuevo deviceId lo contrario, ignorará la operación de actualización.

 await User.updateOne( { _id: user._id, deviceId: "null" }, { $set: { deviceId: req.body.deviceId } }, null, function (err, res){ if (err){ return done(err) }else{ return done(null, user) } } );

En segundo lugar, según su intento, puede lograrlo mediante la actualización con canalización de agregación a partir de MongoDB 4.2,

 await User.updateOne( { _id: user._id }, [{ $set: { deviceId: { $cond: [ { $eq: ["$deviceId", "null"] }, req.body.deviceId, "null" // or you can use "$deviceId" ] } } }], null, function (err, res){ if (err){ return done(err) }else{ return done(null, user) } } )
over 4 years ago · Santiago Trujillo Relatório

0

No, no puede usar $cond con la actualización, MongoDB no lo permite.

Pero aún puede lograr esto de esta manera: actualización de MongoDB con condición

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda