2016-04-20 15 views
1

Ich möchte in der Lage sein: Suchen Sie ein Dokument mit einer bestimmten ID, dann suchen Sie das Dokument in der Legacy-Array auf einer shortID, und aktualisieren Sie die Sets-Array von das eingebettete Dokument, das der shortID entsprach.Update eines eingebetteten Dokuments in einem Array - Mongodb + Knoten Treiber

Offensichtlich hat etwas noch nicht für mich geklickt.

Ich habe die folgende Struktur:

{ 
    "id" : "5706e5b5cbc61e5bf3a9f4e7", 
    "legacy" : [ 
     { 
      "shortID" : "B1zHAllg", 
      "timeStamp" : "Apr 16th 2016", 
      "sets" : [ 
       { 
        "weight" : "7", 
        "reps" : "7" 
       }, 
       { 
        "weight" : "7", 
        "reps" : "7" 
       } 
      ] 
     }, 
     { 
      "shortID" : "HyUVCegx", 
      "timeStamp" : "Apr 16th 2016", 
      "sets" : [ 
       { 
        "weight" : "6", 
        "reps" : "6" 
       }, 
       { 
        "weight" : "6", 
        "reps" : "6" 
       } 
      ] 
     } 
    ] 
} 

Ich habe viele Möglichkeiten ausprobiert, aber ich fühlte, war am nächsten mit dem Versuch, die folgenden:

db.bench.findAndModify({query:{id:"5706e5b5cbc61e5bf3a9f4e7"},sort:{legacy:{$elemMatch:{shortID:"HyUVCegx"}}},update:{$set:{sets:[9]}}}) 

db.bench.update({id : "5706e5b5cbc61e5bf3a9f4e7", legacy:{$elemMatch:{shortID:"HyUVCegx"}}}, {$set : { sets: [{"weight":"5", "reps" :"10"}] }}) 

Antwort

1

Sie wollen Positions Updates für diese Art verwenden, von Operationen. Siehe Dokumentation für positional updates

Beispiel: In MongoDB Shell, Sie tun werden:

db.collection.updateOne(
{"legacy.shortID":"HyUVCegx"}, 
{$set: 
    {"legacy.$.sets": 
    [{"weight":"15", "reps" :"10"}] 
    } 
}) 

Abfrage über Inhalt von Dokumenten in legacy Kriterien ändern, wo shortID = "HyUVCegx"

+0

Perfect! Vielen Dank Saleem! –

Verwandte Themen