Couchbase查询问题

时间:2015-12-27 07:55:45

标签: .net couchbase

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

var query = $" SELECT d FROM默认AS d其中type =' {type}'&#34 ;; var result = Bucket.Query(query);

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

对此有何想法?

1 个答案:

答案 0 :(得分:1)

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

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

这将直接将文档作为JSON对象数组返回,而不是将它们作为子属性添加。这样SDK就能够正确地反序列化结果。

原始回答:

.NET SDK中QueryClient的默认反序列化的当前实现似乎存在错误。我已经通过电子邮件向维护它的人发送电子邮件,看看这是否是他们正在努力修复的问题或新问题。

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

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时,将来也很难删除。 / p>