Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como fazer um '$set' para sub documents

Olá, Estou tentando realizar um mongoose.findByIdAndUpdate, porém com minha estrutura de documento de banco de dados, o resultado esperado não é obtido.

Primeiramente, aqui podemos notar um exemplo do documento que estou operando no mongo.

{
        "_id" : ObjectId("5a1ffc750bedd605086a3788"),
        "machineName" : "Testes",
        "__v" : 0,
        "status" : -1,
        "requestData" : "",
        "responseData" : {
                "executionStatus" : 0,
                "reportName" : "file.pdf"
        }
}

Ao realizar a chamada

model.findByIdAndUpdate(id, {$set: data})

Sendo data

{
    "status": 1,  
    "responseData":{
        "paramns": "BLABLABLABLABA"
    }
}

O status é atualizado corretamente (e se não existir é criado), porém os valores que já tinham em "responseData" são substituídos, seguindo o resultado abaixo.

{
        "_id" : ObjectId("5a1ffc750bedd605086a3788"),
        "machineName" : "Testes",
        "__v" : 0,
        "status" : 1,
        "requestData" : "",
        "responseData" : {
                "paramns": "BLABLABLABLABA"
        }
}

O que devo fazer para que haja um merge das informações que estão armazenadas com as que estão chegando? Conforme abaixo.

{
        "_id" : ObjectId("5a1ffc750bedd605086a3788"),
        "machineName" : "Testes",
        "__v" : 0,
        "status" : 1,
        "requestData" : "",
        "responseData" : {
                    "executionStatus" : 0,
                "reportName" : "file.pdf",
                "paramns": "BLABLABLABLABA"
        }
}
1 resposta
solução!

Pelo o que eu entendi, os dados do update devem ter apenas o que deseja modificar. Você, pelo seu relato, está enviando mais dados (propriedades). Certo?

Vice pode buscar o documento também, atualiza-lo manualmente e depois atualiza-lo no banco. Aqui você poderá fazer o ajuste fino que desejar.