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

259
Visualizações
¿Cómo enviar un valor a un campo de matriz solo si cumple una condición en mongoDB? (Nodejs)

Pido disculpas por mi mala manera de explicar mi problema. Estoy tratando de actualizar las notas de mi esquema y los campos del historial de asignaciones. No tengo problemas para actualizar el campo de notas, pero con el campo de historial de asignaciones, lo que estoy tratando de hacer es agregar valores a la matriz solo si el valor asignado a ha cambiado desde su último valor o no está vacío solo entonces $ empujar a la matriz de historial de asignaciones, de lo contrario, no No agregue nada a la matriz de historial de asignaciones. Básicamente, ¿cómo evito que $push no agregue nada a la matriz del historial de asignaciones, ni siquiera un objeto vacío con el campo _id? A continuación se muestra un fragmento de mi código

 const RequestSchema = new Schema( { title: { type: String, required: true, max: 32, min: 6 }, priority: { type: String, emum: ["low", "medium", "high"] }, notes: [ { commentNotes: { comment: { type: String, max: 200 }, commentBy: { type: Schema.Types.ObjectId, ref: "User" }, commentDate: { type: Date }, } ] assignedTo: { type: Schema.Types.ObjectId, ref: "User" }, assigmentHistory: [ { techName: { type: Schema.Types.ObjectId, ref: "User" }, assignedDate: { type: Date }, } ] } let noteObj={}; let techobj={}; await RequestModel.findOneAndUpdate( { _id }, { $push: { notes: [noteObj], assignmentHistory:[techobj] }, }, { new: true } );
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Para insertar solo un elemento en una matriz si el valor aún no está presente, puede usar $addToSet . Vea este ejemplo en mongoplayground . Con respecto al manejo del objeto vacío, simplemente lo haría en el lado del cliente y construiría dinámicamente la consulta. Entonces algo como:

 const addToSetObj = {}; if(!isEmpty(noteObj)) { // use one of the method for isEmpty described here https://stackoverflow.com/q/679915/3761628 pushObj.notes = noteObj; } if(!isEmpty(techObj)) { pushObj.assignmentHistory = techObj; } await RequestModel.findOneAndUpdate( { _id }, { $addToSet: addToSetObj }, { new: true } );
about 4 years ago · Juan Pablo Isaza Relatório

0

Tengo una solución alternativa, pero me gustaría una forma más profesional de evitar agregar objetos vacíos al campo de matriz.

Básicamente, solo quería enviar un objeto al campo de matriz de historial de asignación de mi esquema si la variable asignado a era verdadera. Good Programming no recomienda usar el mismo código dos veces, pero en mi caso he usado la consulta findoneAndUpdate dos veces en la condición if y else. Por favor, siéntase libre de optimizarlo. Todo lo que quiero es cuando la variable asignado a es falsa, entonces $addToSet no agrega un objeto vacío en el campo de matriz de historial de asignaciones.

 if ( assignedTo && assignedTo.toString() !== oldRequest.assignedTo.toString() ) { await RequestModel.findOneAndUpdate( { _id }, { $set: requestFields, $push: { notes: [noteObj], }, $addToSet: { assigmentHistory: [newtech_info_object] }, }, { new: true } ); } else { await RequestModel.findOneAndUpdate( { _id }, { $set: requestFields, $push: { notes: [noteObj], }, }, { new: true } ); }
about 4 years ago · Juan Pablo Isaza 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