MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

„upsert“ във вграден документ

Можете да използвате $addToSet, за да добавите към набор, като се уверите, че няма дублиран елемент на масива, но това няма да работи за вашия случай на „актуализиране“.

За да направите това, което искате, ще трябва да промените структурата на данните си на нещо като:

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

Сега можете да направите актуализация на локала nl_NL само с:

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

И нов локал също ще работи, като например с:

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

Може би бихте искали да помислите дали локалът също е част от вложения обект, като в:

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

Това улеснява извличането на данни в някои случаи.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Работа с грешки при валидиране на Mongoose – къде и как?

  2. MongoDB директория с данни /data/db не е намерена

  3. Отидете:Създайте io.Writer интерфейс за регистриране в базата данни mongodb

  4. 2 начина за добавяне на стойност към масив в MongoDB

  5. Mongoose/node.js как да намирате, попълвате, правите неща, „освобождавате“ и актуализирате