sql >> Base de Datos >  >> NoSQL >> MongoDB

'upsert' en un documento incrustado

Puede usar $addToSet para agregar a un conjunto asegurándose de que no haya un elemento de matriz duplicado, pero eso no funcionará para su caso de "actualización".

Para hacer lo que desea, deberá cambiar su estructura de datos a algo como:

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

Ahora puede hacer una actualización en la configuración regional nl_NL con solo:

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

Y una nueva configuración regional también funcionará, como con:

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

Es posible que también desee considerar tener la configuración regional como parte del objeto anidado, como en:

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

Esto facilita la recuperación de datos en algunos casos.