couchdb添加文档转换—;使用更新功能

couchdb添加文档转换—;使用更新功能,couchdb,Couchdb,我有一个更新方法updates/adddate.js function(oldDoc, req) { var newDoc = req.body; return [newDoc, toJSON({newDoc:newDoc,oldDoc:oldDoc})]; } 它会作为一个文件放到设计文档中 "updates": { "add-date": "function(oldDoc, req) {\n var newDoc = fromJSON(req.body)

我有一个更新方法
updates/adddate.js

function(oldDoc, req) {
    var newDoc = req.body;
    return [newDoc, toJSON({newDoc:newDoc,oldDoc:oldDoc})];
}
它会作为一个文件放到设计文档中

"updates": {
       "add-date": "function(oldDoc, req) {\n    var newDoc = fromJSON(req.body);\n    return [newDoc, toJSON({newDoc:newDoc,oldDoc:oldDoc})];\n}"
},
我希望它是一个“不做任何事情”,当我使用它进行put时,
“/db/\u design/xyz/\u update/add date/“+value.\u id
,它应该像我们直接放置它一样放置文档,但我没有得到任何更改,并且在日志中:

PUT /q-couch-test/_design/couch-experiment/_update/add-removed-date/2601b8c4dad9648e8ddae3804f15e652 200
我希望状态为
201
而不是
200
,并且不会对文档进行任何更改。我做错了什么?

这对我很有用

"add-date": "function(oldDoc, req) {\n    var newDoc = oldDoc;\n    return [newDoc,      toJSON({newDoc:newDoc,oldDoc:oldDoc})];\n}"
首先,当我尝试运行更新函数时,fromJson给出了一个错误。它是内置的couchDB函数吗?我在谷歌上搜索时找不到关于它的任何信息

req.body
将包含您从客户端发送的数据。其中,实际文档位于
oldDoc
本身。因为您“什么都不做”,所以可以设置
newDoc=oldDoc
并返回它。下面是我在向修改后的update函数发出curl请求后得到的头

HTTP/1.1201已创建

X-Coach-Update-NewRev:3-97E66B27322DB9DEB7D03A3292648F0

X-Coach-Id:753FFDC034C3681616E5939D6200211

服务器:CouchDB/1.5.0(Erlang OTP/R16B02)

日期:2014年4月3日星期四06:37:57 GMT

内容类型:text/html;字符集=utf-8

内容长度:431

如果您尝试将文档更新为空值,则它相当于

返回[null,doc]

在这种情况下,文档实际上不会被更新,您只会得到一个200 ok的响应。从

handler函数将数据库和http请求环境中文档的最新版本作为参数。它返回两个元素的数组:第一个元素是(更新的或新的)文档,它被提交到数据库。如果第一个元素为null,则不会向数据库提交任何文档


当我说什么都不做时,我的意思不是“不更新文档”,而是像没有更新功能一样更新文档。(这是毫无意义的,你可能会问为什么要有一个更新函数。这样我就有了一个基础来做一些有用的事情。如果我做不到这一点,那么我就不能编写任何有用的更新函数。)我会尝试你的代码,因为它会给出一些见解。@richard是的,这正是它所做的。我可能在回答中解释得不好,但它基本上只是用旧文档更新文档。您可以通过获取文档的所有版本信息来测试它<代码>http://localhost:5984/your_db/your_doc_id?revs_info=true。让我知道它是否有效。不,你解释得很好。是我解释得很糟糕。这是我对“什么都不做”的定义,我的意思不是保持文件不变。我的意思是更新文档,就像我没有安装更新功能一样。