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

'upsert' em um documento incorporado


Você pode usar $addToSet para adicionar a um conjunto, certificando-se de que não há elemento de matriz duplicado, mas isso não funcionará para o seu caso de "atualização".

Para fazer o que deseja, você precisará alterar sua estrutura de dados para algo como:
{
    "_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
    "component_id" : 1,
    "_locales" : {
        "nl_NL" : {
            "url" : "dutch"
        }
    }
}

Agora você pode fazer uma atualização na localidade nl_NL com apenas:
db.components.update( { component_id: 1 }, { $set: { '_locales.nl_NL.url' : 'new url' } }, true );

E uma nova localidade também funcionará, como com:
db.components.update( { component_id: 1 }, { $set: { '_locales.en_US.url' : 'American' } }, true );

Você pode querer considerar ter a localidade como parte do objeto aninhado, talvez, como em:
{
    "_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
    "component_id" : 1,
    "_locales" : {
        "nl_NL" : {
            "url" : "dutch"
            "locale" : "nl_NL"                 
        }
    }
}

Isso facilita a recuperação de dados em alguns casos.