我正在尝试实现一个非常基本的C应用程序,它使用C查询Couchbase视图。因为我可以从DB服务器检索数据,甚至可以使用范围查询(startkey和endkey)查询视图。但是,如果我创建一个带有复合键的视图,即有两个值的索引,那么我将一无所获。如果我在PHP或Node中实现相同的视图,就会得到正确的数据。我对C SDK的理解是,它使用Couchbase的REST,所以选项字符串(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文档看起来也不太详细。
任何帮助都是非常感谢的。
发布于 2015-08-11 04:34:35
如果实际发布带有复合键的视图,这将有所帮助!代码实际上是按预期工作的。但是,对于查询/选项字符串的格式以及创建时是否应该使用URL编码的格式,人们会很感兴趣。
更新:在设置新的Couchbase服务器并将其填充到相同的数据集并重新生成它实际工作的视图之后,更新。所以我不知道为什么它对原始服务器不起作用。我用一个细齿梳完成了map函数,检查了所有变量和参数的正确拼写(大写/小写)。至少起作用了。:)
https://stackoverflow.com/questions/31933008
复制相似问题