Como faço para atualizar parcialmente um objeto no MongoDB para que o novo objeto seja sobreposto / mesclado com o existente

Dado este documento salvo no MongoDB

<code>{
   _id : ...,
   some_key: { 
        param1 : "val1",
        param2 : "val2",
        param3 : "val3"
   }
}
</code>

Um objeto com novas informações sobreparam2 eparam3 do mundo exterior precisa ser salvo

<code>var new_info = {
    param2 : "val2_new",
    param3 : "val3_new"
};
</code>

Eu quero mesclar / sobrepor os novos campos sobre o estado existente do objeto para que o param1 não seja removido

Fazendo isso

<code>db.collection.update(  { _id:...} , { $set: { some_key : new_info  } } 
</code>

Levará o MongoDB a fazer exatamente o que foi pedido e definirá some_key para esse valor. substituindo o antigo.

<code>{
   _id : ...,
   some_key: { 
      param2 : "val2_new",
      param3 : "val3_new"
   }
}
</code>

Qual é a maneira de fazer o MongoDB atualizar apenas novos campos (sem explicá-los um por um explicitamente)? para conseguir esta:

<code>{
   _id : ...,
   some_key: { 
        param1 : "val1",
        param2 : "val2_new",
        param3 : "val3_new"
   }
}
</code>

Estou usando o cliente Java, mas qualquer exemplo será apreciado

questionAnswers(13)

yourAnswerToTheQuestion