Search code examples
node.jscouchbasecouchbase-nodejs-sdkbulk-delete

Delete multiple couchbase entities having common key pattern


I have a use case where I have to remove a subset of entities stored in couchbase, e.g. removing all entities with keys starting with "pii_". I am using NodeJS SDK but there is only one remove method which takes one key at a time: http://docs.couchbase.com/sdk-api/couchbase-node-client-2.0.0/Bucket.html#remove

In some cases thousands of entities need to be deleted and it takes very long time if I delete them one by one especially because I don't keep list of keys in my application.


Solution

  • The best way to accomplish this is to create a Couchbase view by key and then range query over that view via your NodeJS code, making deletes on the results.

    For example, your Couchbase view could look like the following:

    function(doc, meta) {
        emit(meta.id, null);
    }
    

    Then in your NodeJS code, you could have something that looks like this:

    var couchbase = require('couchbase');
    var ViewQuery = couchbase.ViewQuery;
    
    var query = ViewQuery.from('designdoc', 'by_id');
    
    query.range("pii_", "pii_" + "\u0000", false);
    
    var myBucket = myCluster.openBucket();
    myBucket.query(query, function(err, results) {
        for(i in results) {
            // Delete code in here
        }
    });
    

    Of course your Couchbase design document and view will be named differently than the example that I gave, but the important part is the ViewQuery.range function that was used.

    All document ids prefixed with pii_ would be returned, in which case you can loop over them and start deleting.

    Best,