2017-09-19 6 views
0

Ich habe eine Node/Express-API mit Mongoose, wo ich Filialdokumente in mehreren Dokumenten zu aktualisieren versuchen.Aktualisieren mehrerer Dokumente mit Mungo funktioniert nicht

Im Wesentlichen habe ich einen Benutzer mit einem Profil, das mehrere Telefonnummern hat, die sie mit einem anderen Kontakt teilen können.

Jeder Kontakt hat einen Abschnitt profile.contacts [], der den Abschnitt profile.contacts.phones [] enthält.

Wenn der Hauptbenutzer, der seine Telefonnummer mit anderen Benutzern teilt, seine/ihre Nummer ändert, möchte ich den Abschnitt profile.contacts.phones [] in allen Dokumenten aktualisieren, in denen die _id dieser Telefonnummer übereinstimmt.

Hier ist mein Code:

Profile.update({'contacts.phones._id':req.body._id}, { 
    Profile.contacts.phones.phone_number:req,body.phone_number, 
    Profile.contacts.phones.phone_type:req.body.phone_type 
    }, {multi:true}, function(err, result){ 
    if(err) 
     res.send(err) 
    res.json(result); 
    }) 

Hier ist ein Beispiel "Profil" Dokument:

{ 
    "_id" : ObjectId("59c09dca981de33d180df943"), 
    "last_name" : "Sam", 
    "first_name" : "Sam", 
    "owner_id" : "59c09dca981de33d180df940", 
    "contacts" : [ 
     { 
      "first_name" : "Joe", 
      "last_name" : "Public", 
      "_id" : ObjectId("59c09dca981de33d180df944"), 
      "phones" : [ 
       { 
        "phone_number" : "2067155803", 
        "phone_type" : "home", 
        "_id" : ObjectId("59bca0b55481370985cac29a") 
       } 
      ] 
     } 
    ] 
    "__v" : 0 
} 

Nach dem, was ich in der Dokumentation zu sehen, sollte diese Arbeit ...

Danke für jeden Einblick !!

Antwort

1

Ich denke, dass Sie den Positionsoperator verwenden müssen, um ein Objekt in einem Array $, die die Abfrage übereinstimmte, zu aktualisieren.

Dies kann jedoch nicht für verschachtelten Arrays verwendet werden:

The positional $ operator cannot be used for queries which traverse more than one array, such as queries that traverse arrays nested within other arrays, because the replacement for the $ placeholder is a single value.

https://docs.mongodb.com/manual/reference/operator/update/positional/

Sie könnten Umstrukturierung Ihre Dokumente zu prüfen haben.

+0

Danke Steve, aber ich erhalte die folgende Fehlermeldung: "das Teil nicht (Kontakte von contacts.phones.phone_type) das Element zu durchqueren { Kontakte nutzen: [{ first_name:" Joe“, last_name : "Public", _id: ObjectId ('59c09dca981de33d180df944') Telefone: [ { phone_number: "2067155803", PHONE_TYPE: "Heimat", _id: ObjectId ('59bca0b55481370985cac29a') } ] } ] } – cnak2

+0

Ich denke, das Problem liegt bei den verschachtelten Arrays: ** Kontakte ** und dann ** Telefone **. –

+0

Danke für deine Hilfe Steve. Ich habe die Kontakte in ein separates Dokument aufgeteilt, wie Sie es vorgeschlagen haben. – cnak2

Verwandte Themen