2012-09-12 13 views
25

Mit Meteor, ich versuche ein Update wie folgt auszuführen:mit einer Variablen in mongodb Update

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

Aber ich bin zu kämpfen mit, wie der Array-Index von Richtungen dynamisch mit etwas zu setzen, wie this:

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

Dies funktioniert nicht, da [Index] in eine Zeichenfolge eingeschlossen ist. Ich habe auch versucht, eine benutzerdefinierte Zeichenfolge wie folgt zu erstellen:

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

Aber das funktioniert nicht. Irgendeine Idee, wie man das macht?

Antwort

48

Sie benötigen $set Objekt programmatisch aufzubauen:

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

aktualisieren

Wenn Ihr JavaScript-Umgebung unterstützt computed property names (zB node.js 4+), können Sie dies in einem Schritt tun :

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

Danke..dies mag für einige einfach erscheinen, aber ich lerne nur mongodb. – Goddard