.net - 为什么从 .net SDK 3.1 查询具有多个键(肯定存在)的复合键视图返回零结果?正确的格式是什么?
问题描述
我有以下 Map 函数的索引(并且没有 reduce 函数):
if (doc.someId && doc.anotherId)
{
emit([doc.someId, doc.anotherId], doc);
}
SomeId 是 int,anotherId 是字符串。
我正在使用 dotnet SDK 3.1 ( https://www.nuget.org/packages/CouchbaseNetClient/3.1.1 ) 来查询视图,如下所示:
var options = new ViewOptions();
object id = new object[] { 123, "777" };
options.Key(ids);
IViewResult<object, T> result;
result = await bucket.ViewQueryAsync<object, T>(designDocument, viewName, options);
var rows = await result.Rows.Select(r => r.Value).ToListAsync();
(designDocument 和 viewName 正确,已建立连接)
我成功地得到了正确的文件。
但是,当我想使用 'options.Keys()' 函数查询多个键时,我得到的结果为零(同样两个键都存在于 couchbase 中):
object[,] ids = new object[,] { { 123, "777" }, { 456, "888" } };
options.Key(ids);
IViewResult<object, T> result;
result = await bucket.ViewQueryAsync<object, T>(designDocument, viewName, options);
var rows = await result.Rows.Select(r => r.Value).ToListAsync();
即使我尝试仅使用一个复合键,但将数组数组用于“Keys()”函数而不是单个数组用于“Key()”函数。
object[,] ids = new object[,] { { 123, "777" } };
options.Keys(ids);
零。
object[,] ids = new object[,] { { 456, "888" } };
options.Keys(ids);
零。
object id = new object[] { 123, "777" };
options.Key(id);
一个结果。
为什么会这样?这是正确的格式吗?它曾经是旧版本 dotnet SDK 上的格式。
我还尝试在 ViewQueryAsync 通用函数中使用不同的类型,但没有成功。
这个 SDK 的文档很差,我找不到任何所需格式的示例或解释。
解决方案
在使用 fiddler 调查旧 SDK 版本(1.0)和新版本后 - 以错误方式发送的格式(SDK 3.1)是
[[[123:"777"],[456:"888"]]]
正确的(SDK 1.0)是
[[123:"777"],[456:"888"]]
与邮递员一起,我尝试使用第一种格式并且它有效。
所以我尝试像这样传递给 Keys 函数数组:
options.Keys(new object[]{123, "777"}, new object[]{456, "888"});
它奏效了。格式是正确的。我得到了结果。
Keys 函数接受
params object[]? keys
推荐阅读
- html - 如何使用 btn 调用我的 ajax 函数/获取
- javascript - 为什么这个导航中的 ul 不在前一个 div 之后?
- angular - mat sort 工作一次然后给出错误
- vue.js - Vue子组件未从父组件接收道具
- c++ - 使用 dart::ffi 从 Dart 包中调试 C++ 代码
- mysql - 从涉及条件的两列计算百分比
- c# - 我可以通过单击第一个孩子的按钮在同一个 MDI 窗口中显示第二个孩子吗?
- java - 通过 Exchange 使用 Javamail 发送电子邮件
- flutter - 如何在PDF中显示阿拉伯语
- javascript - 有没有办法简化 if 语句?