我正在尝试构建过滤视图,我可以根据列范围过滤文档。我的地图功能看起来像这样:
function (doc, meta) {
if(!doc.tombstone) {
emit([doc.effectiveDateTime]);
}
}
当我从代码中查询此视图时,结果只有键而不是文档。
我可以想出以下解决这个问题的方法,并需要帮助决定哪个方法可以解决。
setIncludeDocs :稍微探索一下文档,我来到这个java code snippet,其中在查询上调用setIncludeDocs方法返回完整文档结果。 看起来很有希望,遗憾的是我在C#SDK中找不到这种方法的等价物。
查询单个文档:将文档ID作为emit([doc.effectiveDateTime], meta.id);
之类的值发出,并从客户端单独查询每个文档。我不想使用这种方法,因为客户端最终会多次调用服务器来获取完整的结果集,并且会导致客户端出现性能问题。
发送整个文档:我可以将整个文档作为mapper的emit语句中的值发出,如下所示:emit([doc.effectiveDateTime], doc);
。这种方法的优点是客户端只需要调用一次即可获得结果集。但我不确定这对指数规模的影响。鉴于我的映射器可以处理大多数文档,索引大小会增长还是沙发基会能够以某种方式在内部对其进行优化?
查询reduce函数内的文档(不确定这是否可行):如果我修改mapper以将文档ID作为值发出并具有查询和获取整个文档的机制从reducer里面,我应该能够在reducer里面形成结果集。 是否有任何javascript apis可用于从reducer内部访问数据库?
对于上述观点或任何新观点的任何建议将不胜感激。
答案 0 :(得分:1)
在C#SDK 2.x中,最好的选择是选项2.有一个转折:查询引擎已经将文档的ID作为其响应元数据的一部分发出,您的视图无需发出它。
使用Rows
的{{1}}方法迭代行。这会为您提供每行IViewResult
。在ViewRow<T>
上,只需获取ViewRow
属性即可。然后,您可以按常规方式Id
关联文档。