Node.js 删除具有公共密钥模式的多个couchbase实体

Node.js 删除具有公共密钥模式的多个couchbase实体,node.js,couchbase,couchbase-nodejs-sdk,bulk-delete,Node.js,Couchbase,Couchbase Nodejs Sdk,Bulk Delete,我有一个用例,在这个用例中,我必须删除存储在couchbase中的实体子集,例如,删除所有以“pii_”开头的键的实体。 我使用的是NodeJS SDK,但只有一种删除方法一次只取一个键: 在某些情况下,需要删除数千个实体,如果一个接一个地删除它们需要很长时间,特别是因为我没有在应用程序中保留密钥列表。实现这一点的最佳方法是按密钥创建Couchbase视图,然后通过NodeJS代码对该视图进行范围查询,并对结果进行删除 例如,您的Couchbase视图可能如下所示: function(

我有一个用例,在这个用例中,我必须删除存储在couchbase中的实体子集,例如,删除所有以“pii_”开头的键的实体。 我使用的是NodeJS SDK,但只有一种删除方法一次只取一个键:


在某些情况下,需要删除数千个实体,如果一个接一个地删除它们需要很长时间,特别是因为我没有在应用程序中保留密钥列表。

实现这一点的最佳方法是按密钥创建Couchbase视图,然后通过NodeJS代码对该视图进行范围查询,并对结果进行删除

例如,您的Couchbase视图可能如下所示:

function(doc, meta) {
    emit(meta.id, null);
}
然后,在NodeJS代码中,您可以有如下内容:

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
    }
});
当然,Couchbase设计文档和视图的命名与我给出的示例不同,但重要的部分是使用的
ViewQuery.range
函数

将返回所有以pii\uu前缀的文档ID,在这种情况下,您可以循环它们并开始删除


最好的,

实现这一点的最佳方法是按键创建Couchbase视图,然后通过NodeJS代码对该视图进行范围查询,并对结果进行删除

例如,您的Couchbase视图可能如下所示:

function(doc, meta) {
    emit(meta.id, null);
}
然后,在NodeJS代码中,您可以有如下内容:

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
    }
});
当然,Couchbase设计文档和视图的命名与我给出的示例不同,但重要的部分是使用的
ViewQuery.range
函数

将返回所有以pii\uu前缀的文档ID,在这种情况下,您可以循环它们并开始删除


最好的,

实现这一点的最佳方法是按键创建Couchbase视图,然后通过NodeJS代码对该视图进行范围查询,并对结果进行删除

例如,您的Couchbase视图可能如下所示:

function(doc, meta) {
    emit(meta.id, null);
}
然后,在NodeJS代码中,您可以有如下内容:

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
    }
});
当然,Couchbase设计文档和视图的命名与我给出的示例不同,但重要的部分是使用的
ViewQuery.range
函数

将返回所有以pii\uu前缀的文档ID,在这种情况下,您可以循环它们并开始删除


最好的,

实现这一点的最佳方法是按键创建Couchbase视图,然后通过NodeJS代码对该视图进行范围查询,并对结果进行删除

例如,您的Couchbase视图可能如下所示:

function(doc, meta) {
    emit(meta.id, null);
}
然后,在NodeJS代码中,您可以有如下内容:

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
    }
});
当然,Couchbase设计文档和视图的命名与我给出的示例不同,但重要的部分是使用的
ViewQuery.range
函数

将返回所有以pii\uu前缀的文档ID,在这种情况下,您可以循环它们并开始删除


最好的,

我同意@ThinkFloyd的说法:服务器上的删除应该是服务器上的删除,而不是需要三个步骤,比如从服务器获取数据、在客户端对数据进行迭代,最后在服务器上再次对每个记录进行删除

在这方面,我认为老式的RDBMS更好,您需要做的就是“从数据库中删除*,其中something=something”

幸运的是,CouchBase中有类似于SQL的东西,称为N1QL(发音为nickle)。我不知道JavaScript(和其他语言语法),但这就是我在python中所做的

要使用的查询:从
b中删除,其中META(b).id类似“%” 为了实现同样的目的:如果您存储的是“type”和/或其他元数据,如“parent_id”,则备用查询可以如下所示

中删除,其中type='Feature'和parent_id=8;
但我更喜欢使用查询的第一个版本,因为它是在密钥上操作的,我相信Couchbase必须有一些内部索引,以便在密钥(和其他元数据)上更快地操作/查询。

我同意@ThinkFloyd的说法:服务器上的删除应该是在服务器上的删除,而不需要像从服务器获取数据这样的三个步骤,在客户端对其进行迭代,最后在服务器上再次对每个记录进行删除

在这方面,我认为老式的RDBMS更好,您需要做的就是“从数据库中删除*,其中something=something”

幸运的是,CouchBase中有类似于SQL的东西,称为N1QL(发音为nickle)。我不知道JavaScript(和其他语言语法),但这就是我在python中所做的

要使用的查询:从
b中删除,其中META(b).id类似“%” 为了实现同样的目的:如果您存储的是“type”和/或其他元数据,如“parent_id”,则备用查询可以如下所示

中删除,其中type='Feature'和parent_id=8;
但我更喜欢使用查询的第一个版本,因为它是在密钥上操作的,我相信Couchbase必须有一些内部索引,以便在密钥(和其他元数据)上更快地操作/查询。

我同意@ThinkFloyd的说法:服务器上的删除应该是在服务器上的删除,而不需要像从服务器获取数据这样的三个步骤,在客户端对其进行迭代,最后在服务器上再次对每个记录进行删除

在这方面,我认为老式的RDBMS更好,您需要做的就是“从数据库中删除*,其中something=something”

幸运的是,CouchBase中有类似于SQL的东西,称为N1QL(发音为nickle)。我不知道JavaScript(和其他语言语法),但这就是我在python中所做的

待查询