sql >> Database teknologi >  >> NoSQL >> MongoDB

'upsert' i et indlejret dokument

Du kan bruge $addToSet til at tilføje til et sæt og sikre dig, at der ikke er noget duplikat array-element, men det vil ikke fungere for din "opdaterende" sag.

For at gøre, hvad du vil, skal du ændre din datastruktur til noget som:

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

Nu kan du lave en opdatering på nl_NL-lokaliteten med blot:

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

Og en ny lokalitet vil også fungere, f.eks. med:

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

Du vil måske også overveje at have lokaliteten som en del af det indlejrede objekt, f.eks. i:

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

Dette gør det lettere at hente data i nogle tilfælde.




  1. Redis som unik atom-id-generator - Trådsikker måde til webapp for at undgå racetilstand

  2. Twitter-lignende app ved hjælp af MongoDB

  3. MongoSocketReadException:For tidligt nået slutningen af ​​streamen (efter en periode med inaktivitet)

  4. Java/MongoDB-forespørgsel efter dato