[英]CouchDB update document
請確認這是我可以在bedDB中更新文檔的唯一方法;
為了更新文檔(我們稱其為fooDoc),我需要傳遞“ _rev”。 所以首先,我需要通過以下代碼(foo.get)來獲取該文檔,然后在具有“ _rev”的回調中使用上一次修訂的版本使用foo.insert來更新該文檔:
var foo = nano.db.use('foo');
foo.get('fooDoc', function (err, body) {
console.log("get:", err, body);
foo.insert({"_id": "fooDoc", "_rev": body['_rev'], "name": "newName", "bar": "baz"}, function (err, body) {
console.log("insert:", err, body);
})
});
更新:
感謝Nuno的幫助:所以我一直在關注本文檔 ; 但是,似乎更新處理程序的json格式不是有效的json,因此我將其更新為以下json:
{
"updates": {
"inplace": "function(doc, req) {var field = req.form.field;var value = req.form.value;var message = 'set '+field+' to '+value;doc[field] = value;return [doc, message];}"
}
}
現在,當我運行以下代碼時,它沒有更新,以下是日志:
錯誤:null重新放置:將undefined設置為undefined
編碼:
foo.atomic("update", "inplace", "bar6",
{crazy: true}, function (error, response) {
console.log("error:", error, "respose:", response)
});
我非常感謝您在這方面的幫助
最后更新:哦,我知道了問題所在; 來自這里的更新處理程序在這里輸入鏈接描述不正確; 正確的更新處理程序為:
{
"inplace": "function (doc, req) {var message;var body=JSON.parse(req.body);for (id in body) {doc[id] =body[id];message += 'set ', id, 'to', body[id];}return[doc,message];}"
}
您還可以執行HEAD
請求,以通過標頭中返回的Etag獲取修訂ID。 與獲取整個文檔相比,網絡流量要少一些。
但是,使用此模式確實會刪除使用修訂ID的安全網,以避免覆蓋自您閱讀文檔以來所做的對文檔的修改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.