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

235
Visualizações
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 Respostas
Responde à pergunta

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