【问题标题】:Reading all the documents from a bucket从存储桶中读取所有文档
【发布时间】:2015-11-17 13:30:24
【问题描述】:

有没有办法从存储桶中读取所有文档?它是一个活动存储桶,我也想访问新创建的文档。
很少有人建议使用 view 来查询存储桶。
我如何创建一个将使用新文档或更新文档进行更新的视图?
新建视图的地图功能:

function (doc, meta) {
  emit(doc);
}

Reduce 函数为空。当我像 bucket.query(ViewQuery.from("test1", "all")).totalRows() 这样查询视图时,它返回 0 个结果。

【问题讨论】:

  • 您是否在 Couchbase Web UI 中测试了视图?它在那里返回任何结果吗?

标签: java couchbase couchbase-view


【解决方案1】:

对于返回零结果问题,您是否将视图提升为生产视图?这是一个常见的错误。开发视图只查看一小部分数据,以免使服务器不堪重负。先试试这个。

此外,如果您能提供帮助,永远不要发出整个文档,尤其是当您查看存储桶中的所有文档时。您想发出文档的 ID,然后如果您需要获取这些对象的内容,请执行获取操作或批量操作。我会给你一个批量操作的直接链接,但你没有说你正在使用什么 SDK,这些是 SDK 特定的。例如,这是Java 的那个。

话虽如此,我对您为什么要执行与 select * from bucket 等效的操作有疑问。一旦你有了这些数据,你打算做什么?你真正想做什么?当然,如何解决这个问题有很多选择。

【讨论】:

  • +1 获得关于从不发布完整文档的提示。动机是这样的:通过发出完整的文档,您正在创建索引中数据的副本。换句话说,对于每个文档,您都在索引中创建另一个相同的文档。不好。
  • 我可能会推荐的另一件事是查看这篇博文。 blog.couchbase.com/2015/october/…
【解决方案2】:

视图只是对存储桶的预定义查询。新的或更改的文档将显示在视图中。

您可以在创建视图时通过单击 Web UI 中的“显示结果”按钮来检查其结果,因此如果那里显示 0 个文档,那么您从 SDK 中得到 0 也就不足为奇了。

如果您正在运行 Couchbase Server 4+ 和最新的 SDK,您可以使用 N1QL 并在您的存储桶上创建主索引,然后执行常规 Select * from bucket 以获取所有文档。

【讨论】:

  • 如何在没有视图的情况下从存储桶中获取所有文档?
  • 您在@cricket_007 的回答中没有将 couchbase 与 couchdb 混淆吗?在 couchbase 中,您确实需要一个视图,并且您不应该发出文档。 Java sdk 将很容易让您在查询时检索完整的文档,请参阅 kirk 的回答
  • @SimonBaslé - 不,我在考虑 Couchbase,昨天我试图弄清楚,因为我有代码,但它实际上确实使用了一个视图:\ 而且只是因为你不应该发出doc,并不意味着你不能:) 或者,N1QL 不使用视图
  • n1ql 确实是一个值得一提和推动的替代方案,如果 Couchbase Server 4.0 在桌面上
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多