Gibt es eine Möglichkeit, Werte in einem Objekt zu aktualisieren?
{
_id: 1,
name: 'John Smith',
items: [{
id: 1,
name: 'item 1',
value: 'one'
},{
id: 2,
name: 'item 2',
value: 'two'
}]
}
Nehmen wir an, ich möchte die Namen- und Wertelemente für das Element mit id = 2 aktualisieren.
Ich habe folgendes mit Mungo versucht:
var update = {name: 'updated item2', value: 'two updated'};
Person.update({'items.id': 2}, {'$set': {'items.$': update}}, function(err) { ...
Das Problem bei diesem Ansatz ist, dass das gesamte Objekt aktualisiert / festgelegt wird. In diesem Fall verliere ich daher das ID-Feld.
Gibt es eine bessere Möglichkeit für Mungos, bestimmte Werte in einem Array festzulegen, andere Werte jedoch in Ruhe zu lassen?
Ich habe auch nur nach der Person gefragt:
Person.find({...}, function(err, person) {
person.items ..... // I might be able to search through all the items here and find item with id 2 then update the values I want and call person.save().
});
items.$.name
, hattest duitems.users.$.status
? Funktioniert das?Mongodb-Dokument
quelle
Es gibt einen Mungo-Weg, dies zu tun.
quelle
Für jedes Dokument, das Update Bediener
$set
kann mehrere Werte gesetzt , so anstatt das gesamte Objekt in der Ersatz -items
Array können Sie die festlegenname
undvalue
Felder des Objekts einzeln.quelle
Beachten Sie Folgendes , wenn Sie das Objekt im Array anhand mehrerer Bedingungen durchsuchen und dann $ elemMatch verwenden
Hier ist die Dokumentation
quelle
Hier ist das Dokument über
$[]
: https://docs.mongodb.com/manual/reference/operator/update/positional-all/#up. S []quelle
Im Mungo können wir wie ein einfaches Array aktualisieren
quelle
In Mongoose können wir den Array-Wert mithilfe der
$set
Inside-Dot-.
Notation ( ) auf folgende Weise auf einen bestimmten Wert aktualisierenquelle
Nachdem ich andere Lösungen ausprobiert hatte, die gut funktionierten, aber die Gefahr ihrer Antworten besteht darin, dass nur bereits vorhandene Felder aktualisiert werden und das Hinzufügen von Upsert nichts bewirken würde. Deshalb habe ich mir das ausgedacht.
quelle
Im Folgenden finden Sie ein Beispiel für eine dynamischere Aktualisierung des Werts im Array von Objekten.
Beachten Sie, dass Sie auf diese Weise noch tiefere Ebenen des verschachtelten Arrays aktualisieren können, indem Sie Folgendes hinzufügen
arrayFilters
:Ich hoffe, es hilft. Viel Glück!
quelle