MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

'upsert' dans un document incorporé

Vous pouvez utiliser $addToSet pour ajouter à un ensemble en vous assurant qu'il n'y a pas d'élément de tableau en double, mais cela ne fonctionnera pas pour votre cas de "mise à jour".

Afin de faire ce que vous voulez, vous devrez changer votre structure de données en quelque chose comme :

{
    "_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
    "component_id" : 1,
    "_locales" : {
        "nl_NL" : {
            "url" : "dutch"
        }
    }
}

Vous pouvez maintenant faire une mise à jour sur la locale nl_NL avec juste :

db.components.update( { component_id: 1 }, { $set: { '_locales.nl_NL.url' : 'new url' } }, true );

Et un nouveau paramètre régional fonctionnera également, comme avec :

db.components.update( { component_id: 1 }, { $set: { '_locales.en_US.url' : 'American' } }, true );

Vous voudrez peut-être envisager d'avoir les paramètres régionaux dans le cadre de l'objet imbriqué également, comme dans :

{
    "_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
    "component_id" : 1,
    "_locales" : {
        "nl_NL" : {
            "url" : "dutch"
            "locale" : "nl_NL"                 
        }
    }
}

Cela facilite la récupération des données dans certains cas.