Couchbase 查询问题

Couchbase Query Issue

我们在从 .NET 客户端查询数据时遇到问题。这是我们的代码 运行:

var 查询 = $"SELECT d FROM default AS d where type='{type}'"; var result = Bucket.Query(查询);

问题是虽然 result.Rows 返回了正确的行数,但它们不包含任何数据。在执行 Buck.Query 后,我们可以看到实际返回的是 'd' 类型的实体列表,而不是 ContentBlocks 列表。似乎因此 JSON.NET 无法将其反序列化回正确的类型。

对此有什么想法吗?

更新: 实际上有一个更简单的解决方案。您所要做的就是按如下方式更改镍查询:

SELECT default.* FROM default WHERE type='{type}'

这会将 return 文档直接作为 JSON 个对象的数组,而不是将它们添加为 sub-properties。这样SDK就可以正确反序列化结果了。

原回答:

.NET SDK 中 QueryClient 默认反序列化的当前实现似乎存在错误。我已经给维护它的人发了电子邮件,看看这是他们已经在努力解决的问题,还是一个新问题。

同时,您可以通过使用 N1QL 查询获取文档 ID,然后作为 key-value 操作批量检索文档本身来解决此问题:

var query = "select meta(default).id as docId from default where type='{type}'";
var res = _bucket.Query<dynamic>(query);
var docs = _bucket.Get<ContentBlock>(res.Rows.Select(r => r["docId"].Value as string).ToList())
                  .Select(r => r.Value);

可能还有一种方法可以使用自定义序列化程序来解决它,但这将需要更多工作,并且将来当您想恢复正常使用 Query 时也更难删除。