Ví dụ chức năng in-place
là không giống như "tại chỗ" cập nhật trong cơ sở dữ liệu khác. CouchDB vẫn sử dụng kiến trúc phụ thêm; tài liệu cập nhật trình xử lý vẫn tạo bản sửa đổi tài liệu mới, v.v.
Tuy nhiên, trình xử lý cập nhật khá thuận tiện và đáng học.
Giả sử bạn có tài liệu có bộ tích lũy. Bạn muốn tích lũy số nguyên trong tài liệu chỉ với một truy vấn HTTP, chỉ định số tiền gia tăng sử dụng thông số amount
. Hãy xem xét các lệnh sau:
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"}]
(Hãy nhớ nhấn end-of-file,^D, sau khi đối tượng JSON trong POST.)
Tiếp theo xác nhận tài liệu để tích lũy (my_doc
) tồn tại:
curl http://localhost:5984/db/my_doc
# Returns {"_id":"my_doc","_rev":"1-8c9c19a45a7e2dac735005bbe301eb15",
# "number":23}
Bây giờ bạn có thể gọi handler accumulate
cập nhật với một amount
tham số để cập nhật lĩnh vực này.
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}
Chú ý rằng giá trị mới number
là 38, giá trị của 23 + 15.
Giá trị _rev tăng trên các bản cập nhật. –
Rất tiếc, đã được sửa. Cảm ơn. – JasonSmith