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

本文关键字:返回 文档 结果 查询 Couchbase 视图 | 更新日期: 2024-09-23 03:39:37

我正在尝试构建一个筛选器视图,在那里我可以根据列范围筛选文档。我的地图功能看起来像这样:

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

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

我可以想出以下方法来解决这个问题,并且需要帮助来决定哪种方法可行。

  1. setIncludeDocs:稍微浏览一下文档,我偶然发现了这个java代码片段,其中在查询中调用setIncludeDocs方法以返回完整的文档和结果。它看起来很有希望,但不幸的是,我在C#SDK中找不到类似的方法。

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

  3. 发出整个文档:我可以将整个文档作为映射程序的Emit语句中的值发出,如下所示:emit([doc.effectiveDateTime], doc);。这种方法的优点是客户端只需进行一次调用即可获得结果集。但我不确定这对指数规模的影响。考虑到我的映射器将处理大多数文档,索引大小是否会增长,或者couchbase是否能够以某种方式在内部进行优化?

  4. 在reduce函数内部查询文档(不确定这是否可行):如果我修改映射器以将文档ID作为值发出,并有一种机制从reducer内部查询和获取整个文档,那么我应该能够在reducer内形成结果集是否有任何javascript api可以用于从reducer内部访问数据库

如有任何关于上述要点或任何新要点的建议,我们将不胜感激。

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

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

使用IViewResultRows方法对行进行迭代。这将为您提供每行的ViewRow<T>。在ViewRow上,只需获取Id属性即可。然后,您可以用通常的方式get关联的文档。