2015-03-25 27 views
6

Ho un documento MongoDB che salva le occorrenze di alcune cose in un dizionario:MongoDB: dizionario aggiornamento nel documento

{ 
    "id" : 1, 
    "occurrences" : { 
    "1" : 1, 
    "2" : 5, 
    "17" : 1, 
    "35" : 4 
    } 
} 

Ora voglio aggiungere o aggiornare alcune voci, ad esempio, aggiungere un "12: 3" alle occorrenze, o aggiorna il numero di occorrenze di "17" a 2, quindi diciamo come esempio voglio aggiungere {"12": 3} e {"17": 2} a questo dizionario. Mi fa impazzire perché semplicemente non riesco a farlo funzionare. Potrei usare gli array e tutto il resto, ma mi piacerebbe davvero averlo in questo particolare design. Qualche idea su come risolvere questo? Ho provato così tante cose diverse con $ set e $ ciascuno e così via.

risposta

7

da mongoDb website un'occhiata a "Imposta campi nei documenti embedded"

To specify a <field> in an embedded document or in an array, use dot notation. 
For the document matching the criteria _id equal to 100, the following 
operation updates the make field in the details document: 


db.products.update(
{ _id: 100 }, 
{ $set: { "details.make": "zzz" } }) 

nel tuo caso

db.collection.update(
    {_id:ObjectId("1")}, 
    { $set: { "occurrences.12": "3", "occurrences.17": "2" }}) 
+0

Hey, avrei detto che ho trovato questo, tuttavia, la necessità di aggiungere questo "occorrenze ". di fronte a ogni occorrenza è super disordinato. Forse c'è un modo più semplice? A proposito, userò il driver Java per MongoDB. – konse

+1

non c'è altro modo, non in affitto dal lato MongoDB nativo per quanto mi riguarda. questa è chiamata notazione a punti e questo è il modo in cui mongodb accede agli array e ai documenti embbededd. – DanM

+0

Sei corretto, deve essere in questo modo. – konse

Problemi correlati