示例函数in-place
与其他中的“就地”更新不同
数据库。 CouchDB 仍然使用仅附加架构;文件更新
处理程序仍然创建新的文档修订版等。
尽管如此,更新处理程序仍然非常方便并且值得学习。
假设您有一个带有累加器的文档。你
想要通过一次 HTTP 查询在文档中累积一个整数,指定
使用增量值amount
范围。考虑以下命令:
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"}]
(请记住在 POST 中的 JSON 对象后面按文件结束符 ^D。)
接下来确认累积文件(my_doc
) 存在:
curl http://localhost:5984/db/my_doc
# Returns {"_id":"my_doc","_rev":"1-8c9c19a45a7e2dac735005bbe301eb15",
# "number":23}
现在您可以致电accumulate
更新处理程序amount
参数为
更新字段。
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}
请注意,新的number
值为 38,值为 23 + 15。