我正在尝试实现一个非常基本的 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
存储桶只有 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 文档似乎也不是很详细。
任何帮助表示赞赏。