Skip to content

Instantly share code, notes, and snippets.

@DTAIEB
Created September 1, 2015 01:25
Show Gist options
  • Save DTAIEB/1718a19ad248bacfdba5 to your computer and use it in GitHub Desktop.
Save DTAIEB/1718a19ad248bacfdba5 to your computer and use it in GitHub Desktop.
Delete all documents from a Cloudant view
var async = require("async");
var _ = require("lodash");
function deleteDocsFromView( db, designName, viewName, callback){
async.waterfall([
function( callback ){
db.view(designName, viewName, function(err, data) {
if ( err ){
return callback( err );
}
var docs = _.map( data.rows, function( row ){
return {id: row.id || row.value._id, rev: row.value.rev||row.value._rev};
});
return callback( null, docs );
});
},
function( docs, callback ){
if ( docs.length == 0 || docs[0].rev ){
//We either have no docs to delete, or rev is already retrieved
return callback( null, docs );
}
//Call bulk api to fetch revs
db.fetchRevs( { keys: _.map( docs, function(doc){
return doc.id;
})}, function( err, body ){
if ( err ){
return callback( err );
}
return callback( null, _.map(body.rows, function( row ){
return {id:row.id, rev: row.value.rev};
}));
});
},
function( docs, callback ){
//Delete all docs one by one
async.each( docs, function( doc, callback ){
db.destroy( doc.id, doc.rev, callback );
}, function( err ){
return callback( err );
});
}],
function( err, results ){
return callback( err, results );
}
);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment