2012-09-12 16 views
25

Utilizzando Meteor, sto cercando di eseguire un aggiornamento simile al seguente:utilizzando una variabile in aggiornamento MongoDB

Items.update(Session.get('selectedItem'), {'$set': {'directions.0.name': area.value}}) 

Ma sto lottando con il modo di impostare l'indice di array di direzioni in modo dinamico, con qualcosa di simile this:

var index = //a value determined dynamically 
Items.update(Session.get('selectedItem'), {'$set': {'directions[index]name': area.value}}) 

Questo non funziona perché [indice] è racchiuso in una stringa. Ho anche provato a formare una stringa personalizzata, come questa:

var string = 'directions.'+itemIndex+'.name' 
Items.update(Session.get('selectedItem'), {'$set': {string: area.value}}) 

Ma questo non funziona. Qualche idea su come fare questo?

risposta

48

È necessario costruire il vostro oggetto $set di programmazione:

var setModifier = { $set: {} }; 
setModifier.$set['directions.' + index + '.name'] = area.value; 
Items.update(Session.get('selectedItem'), setModifier); 

Aggiornamento

Se l'ambiente JavaScript supporta computed property names (ad es node.js 4+), si può fare questo in un unico passaggio :

Items.update(Session.get('selectedItem'), { $set: { 
    ['directions.' + index + '.name']: area.value 
}}); 
+1

Grazie ... questo può sembrare semplice per alcuni, ma sto solo imparando mongodb. – Goddard

Problemi correlati