Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

241
Views
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 juegos

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.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

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

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!