这可能是一个基本问题,但我查看了github Cloudant库和Cloudant文档,并从数据库中删除了特定文档,但从未进行过彻底解释。这非常令人沮丧。我最接近删除文档的是使用http请求而不是Cloudant库提供的功能,即使我正在通过文档的_rev,我也会不断获得“文档更新冲突”。任何人都可以解释使用nodejs从Cloudant数据库中删除文档,并附带一个示例来帮助对其进行排序。感谢。
答案 0 :(得分:4)
您可以使用nano的destroy
方法,如@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);
}
});
<强>关键强>
答案 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.'});
}
});
}
}
});