2016-03-23 14 views
1

Eine Frage, wenn ich alle Dokumente in einem Dokument eingebettet aktualisieren möchten, wie könnte ich tun? weil, wenn Sie den folgenden BefehlUpdate-Array von Dokument eingebettet

.update({'sites':{$elemMatch:{'status':true}}},{$set:{'sites.$.status': false}},{multi:true}) 

nur das erste gefundene eingebettete Dokument aktualisiert

Dokumente Beispiel auszuführen:

{ 
    '_id': 1, 
    sites: [ 

    {'status':true,'url':'http://google.com'}, 
    {'status':true,'url':'https://university.mongodb.com'}, 
    {'status':true,'url':'https://docs.mongodb.org'} 
]} 
+1

Es ist momentan nicht möglich. Sie können die Problemumgehung hier lesen: [Wie man mehrere Array-Elemente in mongodb aktualisiert] (http://stackoverflow.com/questions/4669178/how-to-update-multiple-array-elements-in-mongodb). Es gibt ein offenes Problem in MongoDB für diese Funktion: https://jira.mongodb.org/browse/SERVER-1243 – Bonanza

Antwort

1

dies nicht möglich ist, ist die schließt man bekommen kann zu aktualisieren das gesamte Element. Beispiel:

db.test.update({ 
    _id: 1 
}, 
{ 
    $set: { 
     sites: [ 
      {'status':true,'url':'http://1.example.com'}, 
      {'status':true,'url':'http://2.example.com'}, 
      {'status':true,'url':'http://3.example.com'}, 
     ] 
    } 
}) 
+0

Dies ist genau das, was ich in der Antwort auf [Wie man mehrere Array-Elemente in mongodb aktualisieren] (http : //stackoverflow.com/a/33193231/5031275) warnt die Leute ** nicht ** zu tun: * 'Do not shot "aktualisieren Sie das Array' *. Während diese Praxis in einer Datentransformation ohne Aktualisierungsverkehr akzeptabel sein kann, ist es nicht sicher anzunehmen, dass die Array-Mitglieder, von denen Sie dachten, dass sie die einzigen zum Zeitpunkt der Veröffentlichung des Updates waren, "immer noch" das einzige Array sind oder in der gleichen Reihenfolge (sollte Reihenfolge wichtig sein, und auch mit einem anderen Punkt abgedeckt). Sie sollten das selbst lesen. –