从Couchbase的视图查询结果返回完整文档

我正在尝试构建一个过滤视图,我可以根据列范围过滤文档。 我的地图function看起来像这样:

function (doc, meta) { if(!doc.tombstone) { emit([doc.effectiveDateTime]); } } 

当我从代码中查询此视图时,结果只有键而不是文档。

我可以想到以下解决这个问题的方法,需要帮助决定哪个方法可行。

  1. setIncludeDocs :稍微探讨文档,我来到这个java代码片段 ,其中在查询上调用setIncludeDocs方法以返回带有结果的完整文档。 看起来很有希望,遗憾的是我在C#SDK中找不到这种方法的等价物。

  2. 查询单个文档 :将文档id作为值emit([doc.effectiveDateTime], meta.id); 并从客户端分别查询每个文档。 我不想使用这种方法,因为客户端最终会多次调用服务器来获取完整的结果集,并且会导致客户端出现性能问题。

  3. 发出整个文档 :我可以将整个文档作为mapper的emit语句中的值发出,如下所示: emit([doc.effectiveDateTime], doc); 。 这种方法的优点是客户端只需要进行一次调用即可获得结果集。 但我不确定这对指数规模的影响。 鉴于我的映射器将在大多数文档上工作, 索引大小会增长还是沙箱库能够以某种方式在内部对其进行优化?

  4. 查询reduce函数内的文档(不确定这是否可行) :如果我修改mapper以将文档id作为值发出并有一个机制来查询并从reducer中获取整个文档,那么我应该能够形成结果设置在减速器内。 是否有任何javascript apis可用于从reducer内部访问数据库?

有关上述要点或任何新要点的任何建议将不胜感激。

在C#SDK 2.x中,最好的选择是选项2.有一个转折:查询引擎已经将文档的ID作为其响应元数据的一部分发出,您的视图不需要发出它。

使用IViewResultRows方法迭代行。 这为您提供了每行的ViewRow 。 在ViewRow ,只需获取Id属性即可。 然后,您可以通常的方式get相关文档。