2013-10-31 27 views
5

ich folgendes Dokument in der Sammlung haben:Einsatz in Subdokument mit mongoDB

"_id" : "2", 
"workspace" : [{ 
     "name" : "1", 
     "widgets" : [ ] 
    },{ 
     "name" : "2", 
     "widgets" : [ ] 
    },{ 
     "name" : "3", 
     "widgets" : [ ] 
    },{ 
     "name" : "4", 
     "widgets" : [ ] 
    } 
]} 

Wie kann ich {id: "1", blabla: "blabla"} in "Widgets" für den "Namen" einfügen 3?

+1

das ist Subarray nicht! – koolaang

Antwort

11

Im Vergleich zu einer früheren Antwort, die einfach alles in die Wurzel des Dokuments eingefügt, hier ist ein richtiger Weg, dies zu tun with positional operator: Subdocument

db.t.update({ 
"_id" : "2", 
"workspace.name" : "3" 
},{ 
$push: { 
    'workspace.$.widgets' : { 
     id: "2", 
     blabla: "blabla" 
    } 
} 
}); 
+0

Soweit ich weiß, ist dies derzeit keine Option in Meteor's Client-Seite Mini-Mongo (sie haben den positionellen Operator nicht implementiert. Es ist etwas, das sie irgendwann haben wollen). Dies funktioniert nur serverseitig. Für meine Apps habe ich diese Art von Aufgaben serverseitig ausgeführt. Das ist in Ordnung, aber Sie müssen Ihren Sicherheits-/Validierungscode duplizieren. – Dave

+0

haben sie nicht 1.0 getroffen, sie sind immer noch in der Vorschau/Entwicklung. – Dave