MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

O mongo pode fazer upsert de dados de array?


Acabei de me deparar com esse problema. Não consegui encontrar uma solução de uma chamada, mas encontrei uma solução de duas chamadas que funciona quando você tem um valor exclusivo em seus elementos de matriz . Use o $pull comando primeiro, que remove os elementos de uma matriz e, em seguida, $push .
db.soup.update({
    "tester":"tom"
}, {
    $pull: {
        'array': {
            "id": "3"
        }
    }
})
db.soup.update({
    "tester":"tom"
}, {
    $push: {
        'array': {
            "id": "3",
            "letter": "d"
        }
    }
})

Isso deve funcionar quando o documento não existe, quando o documento existe, mas a entrada na matriz não existe e quando a entrada existe.

Novamente, isso só funciona se você tiver algo, como o id campo neste exemplo, que deve ser exclusivo entre os elementos da matriz.