sql >> Database >  >> NoSQL >> MongoDB

'upsert' in een ingesloten document

U kunt $addToSet gebruiken om toe te voegen aan een set en ervoor zorgen dat er geen dubbel array-element is, maar dat zal niet werken voor uw "update"-geval.

Om te doen wat u wilt, moet u uw gegevensstructuur wijzigen in iets als:

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

Nu kun je een update doen op de nl_NL locale met slechts:

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

En een nieuwe landinstelling zal ook werken, zoals met:

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

U kunt overwegen om de landinstelling ook als onderdeel van het geneste object te gebruiken, zoals in:

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

Dit maakt het in sommige gevallen gemakkelijker om gegevens op te halen.




  1. Controleer het huidige aantal verbindingen met MongoDb

  2. Hoe een punt in de veldnaam te gebruiken?

  3. MongoDB-update met voorwaarde

  4. Bereikquery voor MongoDB-paginering