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

264
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 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