如何在 Couchbase 中提取带有前缀的所有键
How to extract all keys with a prefix in Couchbase
我想删除所有带前缀的文档。例如,所有文档 ID 以名称开头的文档都可以说 Identifier1
。
我找到了 this 篇使用 NodeJS 执行此操作的文章。我无法将此代码转换为等效的 C# 代码。
在 C# 中,范围表示为 StartKey
和 EndKey
。
首先在服务器端必须创建视图并将其发布到生产环境:
function(doc, meta) {
emit(meta.id, null);
}
然后 在客户端 使用一个 ViewQuery
对象与 StartKey
和 EndKey
:
var prefix = "pre_"; //this should be a parameter of your method
var query = ViewQuery.From("designDocumentName", "viewName");
query.StartKey(prefix);
query.EndKey(prefix + "\u0000");
然后使用 Bucket
的 Query(ViewQuery)
方法执行查询。
如果您使用的是 Couchbase 4.x,那么除了 Simon 在他的回答中所建议的之外,您还可以使用 N1QL 通过简单的查询来删除文档。
首先,如果您以前没有使用过 N1QL,请通过 运行 以下查询一次确保您在存储桶上有一个主索引:
CREATE PRIMARY INDEX ON <bucket> USING GSI;
您可以使用命令行查询工具(位于 /opt/couchbase/bin/cbq
),或者,如果使用 Couchbase 4.5+,则可以使用 UI 中的查询 Workbench。
然后,要删除ID前缀的所有文档,请使用以下命令:
DELETE FROM <bucket> WHERE meta().id LIKE '<prefix>%';
同样,您可以使用命令行工具 Query Workbench,或以编程方式执行此操作,在 C# 中类似于以下内容:
var result = await bucket.QueryAsync("<query>");
我想删除所有带前缀的文档。例如,所有文档 ID 以名称开头的文档都可以说 Identifier1
。
我找到了 this 篇使用 NodeJS 执行此操作的文章。我无法将此代码转换为等效的 C# 代码。
在 C# 中,范围表示为 StartKey
和 EndKey
。
首先在服务器端必须创建视图并将其发布到生产环境:
function(doc, meta) {
emit(meta.id, null);
}
然后 在客户端 使用一个 ViewQuery
对象与 StartKey
和 EndKey
:
var prefix = "pre_"; //this should be a parameter of your method
var query = ViewQuery.From("designDocumentName", "viewName");
query.StartKey(prefix);
query.EndKey(prefix + "\u0000");
然后使用 Bucket
的 Query(ViewQuery)
方法执行查询。
如果您使用的是 Couchbase 4.x,那么除了 Simon 在他的回答中所建议的之外,您还可以使用 N1QL 通过简单的查询来删除文档。
首先,如果您以前没有使用过 N1QL,请通过 运行 以下查询一次确保您在存储桶上有一个主索引:
CREATE PRIMARY INDEX ON <bucket> USING GSI;
您可以使用命令行查询工具(位于 /opt/couchbase/bin/cbq
),或者,如果使用 Couchbase 4.5+,则可以使用 UI 中的查询 Workbench。
然后,要删除ID前缀的所有文档,请使用以下命令:
DELETE FROM <bucket> WHERE meta().id LIKE '<prefix>%';
同样,您可以使用命令行工具 Query Workbench,或以编程方式执行此操作,在 C# 中类似于以下内容:
var result = await bucket.QueryAsync("<query>");