Ich werte gerade aus, ob ArangoDB eine zukünftige Alternative für uns sein kann. Als Teil dieser Evaluierung portiere ich Code, der mit unserer aktuellen NoSQL-Datenbank kommuniziert, in Code, der ArangoDB spricht. Während es bisher eine ziemlich reibungslose Fahrt war, habe ich erstaunlich schwierig, wie ich Subdokumente aktualisieren soll. Angenommen, wir haben so etwas wie dieses:Aktualisierung ArangoDB Subdokument
{
"_key": "12345",
"subdoc": {
"0": {
"num_sold": 6,
"other_attribute": "important"
},
"1": {
"num_sold": 4,
"other_attribute": "important"
}
}
}
Was möchte ich jetzt zu erreichen, es atomar num_sold
zu erhöhen.
Ein erster naiver Ansatz war natürlich etwas Ähnliches versuchen:
FOR d in @@collection
FILTER d._key == "12345"
UPDATE d WITH { subdoc.0.num_sold : subdoc.0.num_sold + 1 } IN @@collection
RETURN d
(Spoiler-Warnung für den Kopie-Pasters da draußen.. Gehen Dieses Ausschnitt wird nur das Leben schwer machen)
Dies hat offensichtlich nicht funktioniert und wahrscheinlich aus mehr als einem Grund. Arango scheint nicht zu mögen, dass ich das Attribut mit Punktnotation referenziere, das Attribut, das mit einer Zahl ("0") beginnt, könnte ebenfalls ein Problem sein usw. Während ich ein Beispiel gefunden habe here schien es ein wenig kompliziert und kompliziert für das, was ich bin versuchen zu tun. Es gibt auch eine andere Diskussion here, die nahe ist, was ich gerne tun würde. Die vorgeschlagene Lösung in dieser Diskussion verwendet jedoch das Schlüsselwort OLD
, das in meinem Fall einen Fehler erzeugt, sowie den Code, der alle Schlüssel in "0" ersetzt.
1) Was ist der beste Weg, um num_sold
atomar zu erhöhen?
2) Wann ist eine Operation atomar? (Versuchen Sie, Transaktionen so lange wie möglich zu vermeiden)
3) Wann kann die Punktnotation verwendet werden und wann kann sie nicht verwendet werden?
4) Kann ich Parameter an ein Attribut binden? Zum Beispiel lassen einige @attribute
subdoc.0.num_sold
sein?
Danke!