2012-06-29 11 views
5

Ecco un esempio di ciò che sto cercando di fare, poiché non posso spiegare cosa intendo.Come aggiungo un altro valore a un dizionario in MongoDB?

Eseguo questo nella CLI mongo: db.posts.insert({name: "Hello, world!, body: "Here's my first blog post. Happy reading!", comments: []}). Quello che voglio fare è aggiornare quella voce per aggiungere un commento al dizionario comments.

Come potrei farlo con db.posts.update()?

+0

Ho curato la questione per renderlo un "vero problema".Se questo non soddisfa ancora i tuoi standard, per favore dimmi qual è il problema. –

+0

Per aggiungere un elemento a un array, penso che quello che vuoi sia $ push o $ addToSet: http://www.mongodb.org/display/DOCS/Updating – matulef

risposta

-2

Per un oggetto come:

{ 
    name: "Hello, world!", 
    content: "This is my first post" 
} 

se la società esegue

db.posts.update({name: "Hello, world!"}, {name: "First post"}); 

questo è quello che sarebbe il risultato:

{ 
    title: "First post" 
} 

L'attributo contenuto sarà rimosso in quanto non vi non sono forniti valori sostitutivi. Sto menzionando questo perché si tratta di un errore comune.

Quindi, se si vuole "aggiungere" un attributo, è necessario eseguire:

db.posts.update({name: "Hello, world!" }, { $push: {comments: "First comment!"}}); 

$ spinta viene utilizzato se si sta allegando i dati ad un array. Se è un campo normale usa $ set.

Riferimento: domanda ed esempio http://www.mongodb.org/display/DOCS/Updating

6

del PO non corrispondono. Vuole effettivamente inserire un campo in un array all'interno del documento, il che significa che

db.posts.update({name: "Hello, world!" }, { $push: {comments: "First comment!"}}); 

funziona bene.

Tuttavia, se si desidera aggiungere un valore o un documento secondario a un dizionario, si utilizzerà il comando $set. Prendete questo documento come il nostro esempio:

{ 
    "_id": { 
     "$oid": "538420b2862a656e9e99fc93" 
    }, 
    "name": "Farmer John", 
    "items": { 
     "peaches": 5, 
     "bananas": 10 
    } 
} 

Diciamo che si desidera aggiungere "apples": 2 agli elementi. Il comando sarà

db.collection.update({"name": "Farmer John"}, 
        {"$set": {"items.apples": 2}}); 

Il vostro documento sarebbe quindi simile:

{ 
    "_id": { 
     "$oid": "538420b2862a656e9e99fc93" 
    }, 
    "name": "Farmer John", 
    "items": { 
     "peaches": 5, 
     "bananas": 10, 
     "apples: 2 
    } 
} 

Si noti che questo funziona con l'inserimento di documento secondario e, in modo siamo in grado di modificare l'esempio originale:

{ 
    "_id": { 
     "$oid": "538420b2862a656e9e99fc93" 
    }, 
    "name": "Farmer John", 
    "items": { 
     "peaches": { 
      "yellow": 5, 
      "white": 3 
     } 
    } 
} 

Inseriamo 4 mele Granny Smith e 8 mele Fuji.

db.collection.update({"name": "Farmer John"}, 
        {"$set": {"items.apples": {"fuji": 8, "granny smith": 4}}}); 

nostro documento sarebbe ora:

{ 
    "_id": { 
     "$oid": "538420b2862a656e9e99fc93" 
    }, 
    "name": "Farmer John", 
    "items": { 
     "peaches": { 
      "yellow": 5, 
      "white": 3 
     }, 
     "apples": { 
      "fuji": 8, 
      "granny smith": 4 
     } 
    } 
} 

Un ultimo commento: notare che se il documento secondario o il campo esiste già, allora sarà sovrascritto dal comando $set.

Problemi correlati