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

191
Vistas
MongoDB: $ mergeObjects está sobrescribiendo datos de objetos en la canalización de actualización

Cuando se usa $mergeObjects en la canalización de actualización, el objeto original se sobrescribe. ¿Hay alguna alternativa para evitar que esto suceda o se puede $mergeObjects de alguna manera para evitarlo?

Tengo un documento de la siguiente manera:

 { "employment": { "selfEmployed": { "netProfit": 1000, "addbacks": [ { "addbackId": "5a934e000102030405000001", "value": 1000, } ] } } }

Tengo datos de actualización de la siguiente manera:

 const update = { "selfEmployed": { "netProfit": 22, } };

La consulta de actualización es:

 db.collection.update({}, [ { $set: { "employment": { $mergeObjects: [ "$employment", update ] } } } ])

Sin embargo $mergeObjects sobrescribe el objeto para dar el siguiente resultado:

 { "employment": { "selfEmployed": { "netProfit": 22 } } }

Resultado Esperado:

 { "employment": { "selfEmployed": { "netProfit": 22, "addbacks": [ { "addbackId": "5a934e000102030405000001", "value": 1000, } ] } } }

Patio de recreo

Edición 1:

Solo puedo confiar en el campo de nivel superior para realizar la actualización. Algunas respuestas a continuación funcionan para selfEmployed . Pero también tengo otros campos en la colección. p.ej

 { "employment": { "selfEmployed": { "netProfit": 1000, "addbacks": [ { "addbackId": "5a934e000102030405000001", "value": 1000, } ] }, "unemployed": { "reason": "some reason", //... other data } // .. other data } }

Y no quiero repetir o escribir varias consultas para actualizar los campos anidados y usar el conjunto directo tampoco es una opción. Estoy buscando una manera de usar la canalización de actualización como he indicado anteriormente.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Según $mergeObjects Behavior ,

$mergeObjects sobrescribe los valores de campo a medida que fusiona los documentos. Si los documentos para fusionar incluyen el mismo nombre de campo, el campo, en el documento resultante, tiene el valor del último documento fusionado para el campo.

Por lo tanto, el employment.selfEmployed original.selfEmployed se reemplazará con el nuevo valor.


Solución 1: Valor directo $set para employment.selfEmployed.netProfit .

 db.collection.update({}, [ { $set: { "employment.selfEmployed.netProfit": 22 } } ])

Muestra de Mongo Playground para la Solución 1


Solución 2: $mergeObjects para employment.selfEmployed . SelfEmployed únicamente.

 db.collection.update({}, [ { $set: { "employment.selfEmployed": { $mergeObjects: [ "$employment.selfEmployed", { "netProfit": 22 } ] } } } ])

Ejemplo de Mongo Playground para la Solución 2

over 4 years ago · Santiago Trujillo 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