2012-09-12 15 views
25

Usando Meteor, estoy tratando de realizar una actualización como la siguiente:utilizando una variable en la actualización mongodb

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

Pero estoy luchando con la forma de establecer el índice de matriz de direcciones de forma dinámica, con algo como esto:

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

Esto no funciona porque [índice] está envuelto en una cadena. También traté de formar una cadena personalizada, como esta:

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

Pero eso no funciona. ¿Alguna idea de como hacerlo?

Respuesta

48

que necesita para construir su objeto $set programación:

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

actualización

Si el entorno de JavaScript apoya computed property names (por ejemplo Node.js 4+), usted puede hacer esto en un solo paso :

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

Gracias ... esto puede parecer simple para algunos, pero recién estoy aprendiendo mongodb. – Goddard

Cuestiones relacionadas