如何提取Couchbase中带有前缀的所有密钥

本文关键字:前缀 密钥 Couchbase 何提取 提取 | 更新日期: 2023-09-27 17:59:30

我想删除所有带前缀的文档。例如,所有documentId以name开头的文档都表示为Identifier1

我已经找到了这篇使用NodeJS实现这一点的文章。我无法将此代码转换为等效的C#代码。

如何提取Couchbase中带有前缀的所有密钥

如果您使用的是Couchbase 4.x,那么除了Simon在回答中建议的内容外,您还可以使用N1QL通过简单的查询删除文档。

首先,如果您以前没有使用过N1QL,请通过运行以下查询一次来确保bucket上有一个主索引:

CREATE PRIMARY INDEX ON <bucket> USING GSI;

您可以使用命令行查询工具(位于/opt/couchbase/bin/cbq中),如果使用Couchbase 4.5+,也可以使用UI中的query Workbench。

然后,要通过ID前缀删除所有文档,请使用以下命令:

DELETE FROM <bucket> WHERE meta().id LIKE '<prefix>%';

同样,您可以使用命令行工具Query Workbench,或者以编程方式执行此操作,这在C#中类似于以下内容:

var result = await bucket.QueryAsync("<query>");

在C#中,范围表示为StartKeyEndKey

首先在服务器端必须创建视图并发布到生产:

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

然后在客户端使用带有StartKeyEndKey:的ViewQuery对象

var prefix = "pre_"; //this should be a parameter of your method
var query = ViewQuery.From("designDocumentName", "viewName");
query.StartKey(prefix);
query.EndKey(prefix + "'u0000");

然后使用BucketQuery(ViewQuery)方法执行查询。