Couchdb/Cloudant 更新处理程序未按预期工作
couchdb/cloudant update handler not working as expected
我正在开发一个使用 Cloudant 作为数据库的应用程序。我遇到这样一种情况:我几乎同时对同一文档进行了两次数据库调用,但是因此,我遇到了冲突错误。所以我尝试在 cloudant 数据库中创建一个更新处理程序函数,如下所示:
{
"_id": "_design/_updateHandler",
"updates": {
"in-place": "function(doc, req) {
var field = req.body.field,
var value= req.body.value,
var doc[field] = value;
return [doc, toJSON(doc)];
}"
}
}
它会在文档中添加一个字段,但不会更新其中的现有字段。这是预期的行为吗?在更新处理程序的 cloudant 文档中和 couchdb 文档中看起来都不是这样。
如果没有,我该如何解决此问题,以便它确实更新现有字段?此外,正如此问题中所回答的,更新处理程序函数仍然会遇到更新冲突,但如何避免它?
提前致谢:)
这是一个与 CouchDB 和 Cloudant 兼容的更新函数的工作示例,用于执行您正在做的事情 - 更新单个字段。
function(doc, req) {
if (!doc) doc = {_id: req.uuid};
var body = JSON.parse(req.body);
var field = body.field;
var value = body.value;
doc[field] = value;
return [doc, JSON.stringify(doc)];
}
POST
请求的正文被视为有效的 JSON,因此您可能需要对 application/json
进行一些标头检查。
此外,如果您只打算像这里一样做字段=值的东西,那么application/x-www-form-url-encoded
会更好,因为它会降低您的有效负载大小和解析时间 - CouchDB和Cloudant会自动将该媒体类型解析为req.form
对象。
最后,最好不要在提供给 CouchDB 或 Cloudant 的任何内容前面加上下划线,因为它被视为顶级字段和_id
值开头的保留字符。_design/_updateHandler
的名字(随后)非常令人困惑......
以下是要复制/粘贴到数据库中的 JSON,以获取有效的更新函数来执行您想要的操作:
{
"_id": "_design/overwrite",
"updates": {
"in-place": "function(doc, req) {'n if (!doc) doc = {_id: req.uuid};'n var body = JSON.parse(req.body);'n var field = body.field;'n var value = body.value;'n doc[field] = value;'n doc.body = body;'n return [doc, JSON.stringify(doc)];'n}"
}
}
要更新现有文档,您需要发出如下所示的HTTP请求(其中bigbluehat
是以前存储的文档_id:
POST /db/_design/overwrite/_update/in-place/bigbluehat
Content-Type: application/json
{"field": "name", "value": "BigBlueHat"}
或者,如果未在请求 URL 中包含文档_id
,则会获得一个新文档,该文档使用 req.uuid
值来存储新文档。
希望对您有所帮助!
- importScripts在web工作程序中返回未定义的
- 读取在具有IE的工作程序中生成的对象URL
- 使用web工作程序进行多个并发繁重计算
- Chrome没有加载最新版本的web工作程序脚本(运行缓存版本)
- web工作程序中不同的服务器请求行为
- Firebase推送通知-节点工作程序
- fetch事件处理程序中的fetch()未触发服务工作程序中的fetch事件
- Async.js队列工作程序未完成
- Web工作程序在处理大型数组时内存不足
- 附加组件生成器:使用端口的多个工作程序
- js web工作程序内存泄漏
- 在执行不区分大小写的排序以删除web工作程序中的重复项时,首选大写字母唯一
- Web工作程序在传递具有数组缓冲区的大型对象数组时会崩溃Chrome选项卡
- 从node.js派生出多个phantomjs工作程序是否理想
- 从web工作程序和主浏览器线程访问相同的websql数据库
- 没有web工作程序的Javascript后台处理
- 如何通过javascript工作程序显示循环进程状态
- 检测正在运行的javascript工作程序
- 正在检索web工作程序中所有变量的列表
- HTML5画布处理中Web工作程序内存不足