Die in-place
Beispielfunktion ist nicht das gleiche wie "in-place" Updates in anderen Datenbanken. CouchDB verwendet immer noch eine Append-Only-Architektur; Dokument-Update Handler immer noch eine neue doc-Revision, etc.
noch Update-Handler sind sehr praktisch und es lohnt sich zu lernen.
Angenommen, Sie haben ein Dokument mit einem Akkumulator. Sie möchten eine Ganzzahl in einem Dokument mit nur einer HTTP-Abfrage akkumulieren, wobei die Inkrementmenge unter Verwendung eines amount
-Parameters angegeben wird. Betrachten Sie die folgenden Befehle:
curl -X PUT http://localhost:5984/db
# Returns {"ok":true}
curl -H "Content-Type:application/json" -X POST http://localhost:5984/db/_bulk_docs -d @-
{"docs":
[
{"_id": "my_doc", "number": 23},
{"_id": "_design/app",
"updates": {
"accumulate": "function (doc, req) {
var inc_amount = parseInt(req.query.amount);
doc.number = doc.number + inc_amount;
return [doc, \"I incremented \" +
doc._id + \" by \" +
inc_amount];
}"
}
}
]
}
# Returns [{"id":"my_doc","rev":"1-8c9c19a45a7e2dac735005bbe301eb15"},
# {"id":"_design/app","rev":"1-83ec85978d1ed32ee741ce767c83d06e"}]
(Denken Sie daran, End-of-Datei zu drücken,^D, nach dem JSON-Objekt in der POST.)
Weiter bestätigen das Dokument für die Akkumulation (my_doc
) vorhanden ist:
curl http://localhost:5984/db/my_doc
# Returns {"_id":"my_doc","_rev":"1-8c9c19a45a7e2dac735005bbe301eb15",
# "number":23}
Jetzt können Sie die accumulate
Handler Update rufen mit einem amount
Parameter Update das Feld ein.
curl -X PUT \
http://localhost:5984/db/_design/app/_update/accumulate/my_doc?amount=15
# Returns: I incremented my_doc by 15
curl http://localhost:5984/db/my_doc
# Returns {"_id":"my_doc","_rev":"2-<whatever>",
# "number":38}
Beachten Sie, dass der neue number
Wert 38 ist, wird der Wert von 23 + 15.
Der _rev-Wert erhöht jedoch auf Updates. –
Whoops, behoben. Vielen Dank. – JasonSmith