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

时间:2015-08-19 18:52:19

标签: node.js couchdb cloudant

这可能是一个基本问题,但我查看了github Cloudant库和Cloudant文档,并从数据库中删除了特定文档,但从未进行过彻底解释。这非常令人沮丧。我最接近删除文档的是使用http请求而不是Cloudant库提供的功能,即使我正在通过文档的_rev,我也会不断获得“文档更新冲突”。任何人都可以解释使用nodejs从Cloudant数据库中删除文档,并附带一个示例来帮助对其进行排序。感谢。

3 个答案:

答案 0 :(得分:4)

您可以使用nanodestroy方法,如@JakePeyser所说,而不是使用http API,因为您使用的是nodejs。 但是,由于您发送_rev并收到“文档更新冲突”错误,因此我怀疑您是否拥有最新的_rev。如果本地_rev与远程_rev不匹配,则“文档更新冲突”主要发生。因此,我建议将destroy函数包装在get函数中。所以@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);
      }
    });
  }
})

答案 1 :(得分:3)

这取决于您使用哪个节点模块与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实例的网址,其中嵌入了用户名和密码
  • yourDB - 您的数据库名称
  • docUniqueId - 您要删除的文档的唯一ID
  • docRevNum - 您要删除的文档的修订号

答案 2 :(得分:1)

根据字段“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.'});
          }
        });
      }
  }
});