【问题标题】:How to extract all keys with a prefix in Couchbase如何在 Couchbase 中提取所有带有前缀的键
【发布时间】:2016-08-02 05:55:49
【问题描述】:

我想删除所有带前缀的文档。例如,所有具有以 name 开头的 documentIds 的文档都可以说是Identifier1

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

【问题讨论】:

    标签: c# couchbase


    【解决方案1】:

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

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

    CREATE PRIMARY INDEX ON <bucket> USING GSI;
    

    您可以使用命令行查询工具(位于 /opt/couchbase/bin/cbq),或者如果使用 Couchbase 4.5+,则可以使用 UI 中的查询工作台。

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

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

    同样,您可以使用命令行工具 Query Workbench,或以编程方式执行此操作,在 C# 中将如下所示:

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

    【讨论】:

      【解决方案2】:

      在 C# 中,范围表示为 StartKeyEndKey

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

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

      然后在客户端使用带有StartKeyEndKeyViewQuery对象:

      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)方法执行查询。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-24
        • 2020-07-18
        • 1970-01-01
        • 2015-08-13
        • 1970-01-01
        • 2014-09-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多