【问题标题】:Couchbase compound keys in views with the C SDK使用 C SDK 的视图中的 Couchbase 复合键
【发布时间】:2015-08-11 04:03:49
【问题描述】:

我正在尝试实现一个非常基本的 C 应用程序,该应用程序使用 C SDK 查询 Couchbase 视图。我让 SDK 能够正常工作,因为我可以从数据库服务器检索数据,甚至可以使用范围查询(startkey 和 endkey)查询视图。但是,如果我使用复合键创建视图,即具有两个值的索引,那么我将一无所获。如果我在 PHP 或 Node 中实现相同的视图,我会得到正确的数据。我对 C SDK 的理解是它使用了 Couchbase 的 REST API,所以选项字符串 (optstr) 与我使用 Couchbase 内置的 Web 管理控制台基本相同。使用单个数字开始和结束键,我就可以正常工作了,但是一旦我开始使用复合键,比如

startkey=["test",2]&endkey=["test",4]

我没有得到任何结果。确实返回数据的查询字符串看起来像

startkey=2&endkey=4

bucket只有5个文档,结构如下:

{number: 1, name: "test"}

数字只是介于 1 和 5 之间。

复合键的视图如下所示:

function (doc, meta) {
  emit([doc.name, doc.number], doc);
}

单键的那个只是将 doc.number 作为发出中的第一个值,而不是一个数组。

我在 C 中用于复合键的代码如下所示:

lcb_CMDVIEWQUERY vq = {0};
vq.optstr = "startkey=[\"test\",2]&endkey=[\"test\",4]";
vq.noptstr = strlen(vq.optstr);
lcb_view_query_initcmd(&vq, "ddoc", "myView", NULL, viewCallback);
lcb_error_t rc = lcb_view_query(instance, NULL, &vq);

复合视图缺少什么? Couchbase 网站上的示例不包含使用任何键的视图,并且其 Git 存储库中的示例也没有任何示例。 Couchbase C SDK 的文档似乎很简陋,甚至 API 文档似乎也不是很详细。

感谢任何帮助。

【问题讨论】:

  • 返回的结果与网页版和其他SDK相比是空的,视图都是创建和发布的,因为我通过PHP成功使用它们。我只需要集成一个用 C/C++ 编写的应用程序
  • 没有关于查询复杂键的文档的原因是您的代码应该可以正常工作。您使用的是什么版本的库?
  • 我也认为代码应该可以正常工作。我在 CentOS 7 上使用 libcouchbase2 v2.5.2-1。Couchbase 服务器本身的版本是 3.0.3-1716。该代码返回一个空数据集,但 Web 界面返回预期的 2 个文档。
  • 没有错误?如果您直接使用 HTTP 提供字符串会怎样? (即通过 curl)
  • 我刚刚尝试使用 beer-sample 桶重现类似的用例。它工作正常,没有问题。请确保您正在从回调中收集任何错误信息。从描述看来,库可能错误地转义了参数(并且可能在不应该的地方应用了百分比编码)。最后,如果您在创建存储桶或插入项目后立即运行视图,则视图可能没有机会更新 - 查看 stale 查询参数

标签: couchbase couchbase-view


【解决方案1】:

如果实际发布带有复合键的视图会有所帮助!该代码实际上确实按预期工作。但是,让人们对查询/选项字符串的格式以及创建时是否应该进行 URL 编码的看法会很有趣。

更新: 在设置一个新的 Couchbase 服务器并使用相同的数据集填充它并重建视图之后,它确实可以工作。所以我不知道为什么它对原始服务器不起作用。我用细齿梳检查了 map 函数,并检查了所有变量和参数的正确拼写(大写/小写)。至少它确实有效。 :)

【讨论】:

    猜你喜欢
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多