从nodejs中的Cloudant数据库中删除一个文档

这可能是一个基本的问题,但我已经浏览了github Cloudant库和Cloudant文档,并从数据库中删除了一个特定的文档,但是没有详细解释。 这是非常令人沮丧的。 我最近删除一个文档是使用一个http请求,而不是函数Cloudant库提供,我不断得到一个“文档更新冲突”即使我通过文档的_rev。 任何人都可以解释一下,使用nodejs从一个Cloudant数据库中删除一个文档,并用一个例子来解决这个问题。 谢谢。

你可以像使用@JakePeyser那样使用nano的destroy方法,而不是使用http API,因为你使用的是nodejs。 但是,由于您正在发送_rev并收到“文档更新冲突”错误,所以我怀疑您是否有最新的_rev。 “文档更新冲突”主要发生在本地_rev与远程_rev不匹配时。 因此,我会build议在一个get函数中包装你的destroy函数。 所以更新@ JakePeyser的例子是:

 var nano = require("nano")("cloudantURL"), db = nano.db.use("yourDB"); db.get(docUniqueId, function(err, body) { if (!err) { var latestRev = body._rev; db.destroy(docUniqueId, latestRev, function(err, body, header) { if (!err) { console.log("Successfully deleted doc", docUniqueId); } }); } }) 

这取决于您用于与Cloudant进行通信的节点模块。 使用nano驱动程序,可以使用destroy方法删除文档。 看下面的代码示例:

 var nano = require("nano")("cloudantURL"), db = nano.db.use("yourDB"); db.destroy(docUniqueId, docRevNum, function(err, body, header) { if (!err) { console.log("Successfully deleted doc", docUniqueId); } }); 

  • cloudantURL – Cloudant实例的URL,embedded了用户名和密码
  • yourDB – 你的数据库名称
  • docUniqueId – 您要删除的文档的唯一ID
  • docRevNum – 您要删除的文档的修订版本号

示例脚本,基于字段“fkId”的值从集合“mytable”中删除/销毁文档。

 var Cloudant = require('cloudant'); var Config = require('config-js'); var config = new Config('./settings.js'); var username = config.get('CLOUDANT_USER'); var password = config.get('CLOUDANT_PASWORD'); var cloudant = Cloudant({account:username, password:password}); var db = cloudant.db.use('mytable'); var key = 'fkId'; var value = '11234567890'; ... ... db.list({ 'include_docs': true }, function (err, body) { /* istanbul ignore next */ if (err) res.json({success: false, msg: 'Unable to fetch documents'}); else { var rows = body.rows; var items = []; var rec_found = false; rows.forEach(function (row) { if (row.doc[key] === value) { rec_found = true; items.push(row.doc); } }); if (items.length === 0) { console.log("No record found with fkId: "+ value); res.json({success: true, msg: 'No record found with fkId: '+ value}); } else { var docId = items[0]._id; var docRev = items[0]._rev; db.destroy(docId, docRev, function(err) { if (!err) { console.log("Successfully deleted doc with fkId: "+ value); res.json({success: true, msg: 'Successfully deleted the item from the database.'}); } else { res.json({success: false, msg: 'Failed to delete with fkId from the database, please try again.'}); } }); } } });