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

311
Vistas
¿Cómo ver solo el campo actualizado de un objeto en los flujos de cambio de Mongo?

He configurado flujos de mongo para una colección de productos a continuación, pero una actualización en cualquier campo del objeto de especificaciones devuelve el objeto de especificaciones completo en lugar del campo actualizado. Esperaría un cambio en el campo de visualización para devolver solo el campo de visualización en lugar de toda la colección de productos de objetos de especificaciones en mongo db

 { "productName": "Apple iPhone 5", "specs": { "network": "GSM / CDMA / HSPA / EVDO / LTE", "display": "IPS LCD", "memory": "16GB 1GB RAM" } }
 const productPipeline = [ { $project: { 'fullDocument.productName': 1, 'updateDescription.updatedFields.specs': 1, }, }, ]; const productChangeStream = this.productModel.watch(productPipeline, { fullDocument: 'updateLookup', }); productChangeStream.on('change', async (data) => { console.log(JSON.stringify(data, null, 2)); });

Intenté usar el productPipeline a continuación, pero aún no funcionó

 const productPipeline=[ { $project: { 'fullDocument.productName': 1, 'updateDescription.updatedFields.specs.network': 1, 'updateDescription.updatedFields.specs.display': 1, 'updateDescription.updatedFields.specs.memory': 1, }, }, ];
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Parece que el comportamiento se debe a la diferencia entre una operación de actualización y de reemplazo. MongoDB tiene dos formas de actualización; una actualización delta y un reemplazo de documento completo.

Los reemplazos se ven así:

 db.coll.update({query for matching document}, {full replacement document}) OR db.collection.replaceOne({query for matching document}, {full replacement document})

Las actualizaciones normales (delta) se ven así:

 db.coll.update({query for matching document}, {$set: {individualField: newValue}})

Si su aplicación está realizando reemplazos completos, el documento de reemplazo completo se registrará en el registro de operaciones. Dado que los flujos de cambios simplemente informan lo que ve en el registro de operaciones, esto producirá un evento de flujo de cambios con {operationType: "replace"} y una copia completa del nuevo documento.

Sin embargo, si realiza una actualización normal, solo se informarán los campos que se cambiaron; recibirá un evento de flujo de cambios con {operationType: "update"} y un campo llamado updateDescription que informa los campos que fueron modificados por la operación. Consulte esta página para obtener detalles sobre los eventos de actualización y reemplazo, y el campo updateDescription.

Por ejemplo, si inserto el documento de muestra que proporcionó anteriormente y luego ejecuto la siguiente actualización:

 db.testing.updateOne({}, {$set: {"branding.control_panel.companyLogo.displayName": "1200px-Logo_NIKE_updated.svg"}})

... luego recibo el siguiente evento de cambio (abreviado para mayor claridad):

 { "_id" : ..., "operationType" : "update", "clusterTime" : ..., "ns" : ..., "documentKey" : ..., "updateDescription" : { "updatedFields" : { "branding.control_panel.companyLogo.displayName" : "1200px-Logo_NIKE_updated.svg" }, "removedFields" : [ ] } }

Aquí está el problema de Jira

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