2016-04-29 7 views
0

Ich habe die folgende Struktur in MongoDB 2.6:Wie zieht Wert von Array in Mongo tief verschachtelten Dokumenten

db.processes: { 
    _id: ObjectId("572756344031b585d03dca57"), 

    activities: [ 
     { 
     procedures: [ 
      { 
      implications_ids: [ 
       ObjectId("50871f11d52ef600020128a2"), ObjectId("50871f17d52ef60002012d03") 
      ] 
      } 
     ] 
     } 
    ] 
} 

Ich mag ObjectId("50871f11d52ef600020128a2")implications_ids aus allen Arrays den Wert entfernen. Ich schrieb den Befehl:

`db.processes.update({}, 
{ $pull: { activities: { procedures: { implications_ids: ObjectId("50871f11d52ef600020128a2") } } } }, 
{ multi: true, safe: true } 
)` 

Der Befehl beendet Ausführung, aber nicht aktualisiert keine Dokumente:

WriteResult({ "nMatched" : 199, "nUpserted" : 0, "nModified" : 0 })

Was mache ich falsch?

Antwort

0

Versucht dieses. Getestet habe ich in mongo3.2, also nicht sicher, ob dies auch in 2,6

db.foo.update({}, { $pull: { "activities.procedures.implications_ids" : ObjectId("50871f11d52ef600020128a2") }}, { multi: true }) 

arbeitet I

db.foo.insert({ activities: { 
     procedures: { 
     implications_ids: [ ObjectId("50871f11d52ef600020128a2"), 
          ObjectId("50871f17d52ef60002012d03")] 
     } 
    } 
    }); 

verwenden Und

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 

> db.foo.find() 

{ "_id" : ObjectId("5723a45f0a8d4f8f305690e6"), "activities" : { "procedures" : 
{ "implications_ids" : [ ObjectId("50871f17d52ef60002012d03") ] } } } 
> 

Nach Ausführung des Befehls erhalten, nur den Namen ändern von Ihrem Dokument

+0

Interessant, als ich das Update mit Punktnotation versuchte, wie Sie vorgeschlagen, bekam ich die Nachricht: 'Kann den Teil nicht verwenden (Aktivitäten von activities.procedures.implications_ids), um das Element zu durchlaufen ({activities: [{_id: ObjectId(), ...}] –

+0

Hinter Ihrer INSERT-Anweisung und ich könnte überprüfen – Koitoer

+0

Die INSERT-Anweisung, die meine Db-Struktur korrekt widerspiegelt, ist: db.processes.insert ( {Aktivitäten: [ {Verfahren: [ {implications_ids: [ObjectId ("50871f11d52ef600020128a2"), ObjectId ("50871f17d52ef60002012d03")]} ]} ]} ) –

Verwandte Themen