2013-08-05 6 views
5

Ho un documento con un array nidificato di documenti che non hanno gli ID

_id: adsjfdsau7Hukad, 
'nested':[{ a:'123456',b:'zzzzzzzzz'}, 
      {a:'788123',b:'6yuuuuuu'}, 
      {a:'123456',b:'ooo998uj'}] 

voglio incrementare una nuova proprietà , 'c' in un elemento specificato di un documento identificato. Ad esempio:

Questo funziona quando è possibile scrivere esplicitamente l'identificatore di posizione ordinale dell'elemento. Ma, ho bisogno di passare una variabile per la posizione ordinale dell'elemento, e non ho trovato un modo per farlo. Ho provato questo:

var num = 4 ## as example 
db.collection.update({_id:'adsjfdsau7Hukad','nested.$': num},{$inc:{'nested.$.c':1}}) 

ma questo non sembra funzionare.

Qualche idea?

risposta

8

è necessario generare la chiave di programmazione:

Nella shell:

var num = 4; 
var inc = {}; 
inc['nested.' + num + '.c'] = 1; 
db.collection.update({_id: 'adsjfdsau7Hukad'}, {$inc: inc}) 

In pymongo:

num = 4 
db.collection.update(
    {'_id': 'adsjfdsau7Hukad'}, 
    {'$inc': {'nested.' + str(num) + '.c': 1}}) 
+0

Questo è esattamente quello che ho pensato ** ** dovrebbe lavoro. Ma ho provato 8 modi per formare domenica e semplicemente non funziona. Ho eseguito la versione della shell che hai suggerito e ho ottenuto quanto segue: 'Mon Aug 05 19: 46: 33.395 Esecuzione JavaScript fallita: SyntaxError: Token imprevisto +' –

+0

Questa modifica ha funzionato per la shell. Ancora problemi con Python, ma potrebbe essere perché sono più abituato a PHP. –

Problemi correlati