2016-06-01 5 views
1

Ich habe ein grundlegendes Dokument wie:Wie finde ich ein Filialdokument einer Sammlung und aktualisiere es mit Mongoose/MongoDB? so

_id: fm393nrr, 
name: 'My Event' 
members: [{ 
    user: 94iru134nf 
    attending: 1 
}, { 
    user: er9fr94, 
    attending: 0 
}] 

Wie würde ich ändern attending ein Mitglied auf der Grundlage ihrer user?

Zum Beispiel so etwas wie:

var eventToFind = 'fm393nrr'; //usually retrieved by req.params 
var userToFind = 'er9fr94'; //usually retrieved by req.body.user 

Event.findOneAndUpdate({ 
     _id: eventToFind 
    }, { 
     $set: {members.attending: {.....}} 
    } 
).exec(function(){....}); 

Im obigen Ich versuche, die Mitglied von er9fr94 einzustellen attending von 1.-Code zu haben, sehr ausgeschaltet ist, aber es war ein langer Schuss Versuch. Habe noch nie mit Filialdokumenten/eingebetteten Dokumenten gearbeitet.

Antwort

1

Fügen Sie doppelte Anführungszeichen hinzu, wenn Sie verschachtelte Objekte behandeln. Die $ wird gleich dem Array-Index der Übereinstimmung.

Try this:

Event.findOneAndUpdate({ 
    _id: eventToFind, 
    "members.user":userToFind, 
}, { 
    $set: {"members.$.attending": {.....}} 
}) 
+0

Also ich würde einfach nur tun '$ Satz: { ". Mitglieder $ Teilnahme": 1}' ändern ihre 'attending'? – Fizzix

+0

Ja. Um die Teilnahme der 'Mitglieder' zu ändern, die' userToFind' entsprechen. – RainingChain

+0

vielleicht hinzufügen '{upsert: true, new: true}' Wenn Sie Probleme haben –

Verwandte Themen