使用 C SDK 的视图中的 Couchbase 复合键
Couchbase compound keys in views with the C SDK
我正在尝试实现一个非常基本的 C 应用程序,它使用 C SDK 查询 Couchbase 视图。我得到了这样的 SDK,因为我可以从数据库服务器检索数据,甚至可以使用范围查询(startkey 和 endkey)查询视图。但是,如果我创建一个带有复合键的视图,即具有两个值的索引,那么我什么也得不到。如果我在 PHP 或 Node 中实现相同的视图,我会得到正确的数据。我对 C SDK 的理解是它使用 Couchbase 的 REST API,因此选项字符串 (optstr) 与我使用 Couchbase 内置的 Web 管理控制台基本相同。使用单个数字开始和结束键,我就可以正常工作,但是一旦我开始使用像
这样的复合键
startkey=["test",2]&endkey=["test",4]
我没有得到任何结果。 return 数据的查询字符串看起来像
startkey=2&endkey=4
该桶只有 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 文档似乎也不是很详细。
感谢任何帮助。
如果带有复合键的视图真的能被发布,那将会很有帮助!该代码确实按预期工作。但是,让人们对 query/option 字符串的格式以及在创建时是否应该 URL 编码的看法会很有趣。
更新:
在设置新的 Couchbase 服务器并用相同的数据集填充它并重建视图后,它确实可以正常工作。所以我不知道为什么它对原始服务器不起作用。我用细齿梳检查了 map 函数并检查了所有变量和参数的正确拼写 (uppercase/lowercase)。至少它确实有效。 :)
我正在尝试实现一个非常基本的 C 应用程序,它使用 C SDK 查询 Couchbase 视图。我得到了这样的 SDK,因为我可以从数据库服务器检索数据,甚至可以使用范围查询(startkey 和 endkey)查询视图。但是,如果我创建一个带有复合键的视图,即具有两个值的索引,那么我什么也得不到。如果我在 PHP 或 Node 中实现相同的视图,我会得到正确的数据。我对 C SDK 的理解是它使用 Couchbase 的 REST API,因此选项字符串 (optstr) 与我使用 Couchbase 内置的 Web 管理控制台基本相同。使用单个数字开始和结束键,我就可以正常工作,但是一旦我开始使用像
这样的复合键startkey=["test",2]&endkey=["test",4]
我没有得到任何结果。 return 数据的查询字符串看起来像
startkey=2&endkey=4
该桶只有 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 文档似乎也不是很详细。
感谢任何帮助。
如果带有复合键的视图真的能被发布,那将会很有帮助!该代码确实按预期工作。但是,让人们对 query/option 字符串的格式以及在创建时是否应该 URL 编码的看法会很有趣。
更新: 在设置新的 Couchbase 服务器并用相同的数据集填充它并重建视图后,它确实可以正常工作。所以我不知道为什么它对原始服务器不起作用。我用细齿梳检查了 map 函数并检查了所有变量和参数的正确拼写 (uppercase/lowercase)。至少它确实有效。 :)