从 Couchbase 的视图查询结果返回完整文档
Returning full document from result of a view query for Couchbase
我正在尝试构建一个过滤视图,我可以在其中根据列范围过滤文档。我的地图函数看起来像这样:
function (doc, meta) {
if(!doc.tombstone) {
emit([doc.effectiveDateTime]);
}
}
当我从代码中查询这个视图时,结果只有键而没有文档。
我可以想到以下方法来解决这个问题,需要帮助来决定哪个可行。
setIncludeDocs:稍微浏览一下文档,我发现这个 java code snippet where the setIncludeDocs 方法在查询 return 时被调用带有结果的完整文档。
看起来很有希望,遗憾的是我在 C# SDK 中找不到与此方法等效的方法。
查询单个文档:像emit([doc.effectiveDateTime], meta.id);
一样发出文档id作为值,并从客户端分别查询每个文档。我不想使用这种方法,因为客户端最终会多次调用服务器以获得完整的结果集,并会导致客户端出现性能问题。
发出整个文档:我可以像这样发出整个文档作为映射器发出语句中的值:emit([doc.effectiveDateTime], doc);
。这种方法的优点是客户端只需调用一次即可获取结果集。但我不确定这对索引大小的影响。考虑到我的映射器将处理大部分文档,索引大小会增长吗 或者 couchbase 是否能够以某种方式在内部对其进行优化?
在 reduce 函数中查询文档(不确定这是否可行):如果我修改映射器以将文档 id 作为值发出并有一个机制从 reducer 内部查询并获取整个文档,那么我应该能够在 reducer 内部形成结果集。 是否有任何 javascript api 可用于从 reducer 内部访问数据库?
如有任何关于以上几点的建议或任何新的建议,我们将不胜感激。
在 C# SDK 2.x 中,您最好的选择是选项 2。有一点不同:查询引擎已经将文档 ID 作为其响应元数据的一部分发出,您的视图不需要发出它。
使用 IViewResult
的 Rows
方法遍历行。这为您提供了每行的 ViewRow<T>
。在 ViewRow
上,只需获取 Id
属性。然后,您可以 get
以通常的方式关联文档。
我正在尝试构建一个过滤视图,我可以在其中根据列范围过滤文档。我的地图函数看起来像这样:
function (doc, meta) {
if(!doc.tombstone) {
emit([doc.effectiveDateTime]);
}
}
当我从代码中查询这个视图时,结果只有键而没有文档。
我可以想到以下方法来解决这个问题,需要帮助来决定哪个可行。
setIncludeDocs:稍微浏览一下文档,我发现这个 java code snippet where the setIncludeDocs 方法在查询 return 时被调用带有结果的完整文档。 看起来很有希望,遗憾的是我在 C# SDK 中找不到与此方法等效的方法。
查询单个文档:像
emit([doc.effectiveDateTime], meta.id);
一样发出文档id作为值,并从客户端分别查询每个文档。我不想使用这种方法,因为客户端最终会多次调用服务器以获得完整的结果集,并会导致客户端出现性能问题。发出整个文档:我可以像这样发出整个文档作为映射器发出语句中的值:
emit([doc.effectiveDateTime], doc);
。这种方法的优点是客户端只需调用一次即可获取结果集。但我不确定这对索引大小的影响。考虑到我的映射器将处理大部分文档,索引大小会增长吗 或者 couchbase 是否能够以某种方式在内部对其进行优化?在 reduce 函数中查询文档(不确定这是否可行):如果我修改映射器以将文档 id 作为值发出并有一个机制从 reducer 内部查询并获取整个文档,那么我应该能够在 reducer 内部形成结果集。 是否有任何 javascript api 可用于从 reducer 内部访问数据库?
如有任何关于以上几点的建议或任何新的建议,我们将不胜感激。
在 C# SDK 2.x 中,您最好的选择是选项 2。有一点不同:查询引擎已经将文档 ID 作为其响应元数据的一部分发出,您的视图不需要发出它。
使用 IViewResult
的 Rows
方法遍历行。这为您提供了每行的 ViewRow<T>
。在 ViewRow
上,只需获取 Id
属性。然后,您可以 get
以通常的方式关联文档。