ravendb python api,查询总是返回128

时间:2017-03-23 13:28:52

标签: python ravendb

我正在查询我的ravendb实例。我的目标集合包含超过30,000个文档。我使用pyravendb和python 3。

我使用以下代码查询索引:

result_ = self.store.database_commands.query(index_name="Raven/DocumentsByEntityName",
                                                    index_query=IndexQuery("Tag:MyCollection",total_size=128,skipped_results=start))
if len(result_['Results']) < 128:
     return

开始是我每次查询时递增128的偏移量变量。 当我运行此代码时,结果的长度始终为128,这会导致无限循环。

为什么会这样做?

3 个答案:

答案 0 :(得分:1)

问题是我正在使用的参数。应该使用的正确参数是 start = offset_that_you_want_to_skip 而不是 skipped_results = offset

正确的代码如下:

result_ = self.store.database_commands.query(index_name="Raven/DocumentsByEntityName",
                                                    index_query=IndexQuery("Tag:MyCollection",total_size=128,skipped_results=0, default_operator=None,start=offset)) 
#blablabla
offset+=128
if len(result_['Results']) < 128:
         return

答案 1 :(得分:1)

在我的提交中查看此处 Get all of a collection's documents id's RavenDB for a "per-document" modification

在pyravendb v3.5.3.5中,我更新了IndexQuery,现在你可以跳过或接受更少或更多的文件然后128.

另一件事不使用total_size或skipped_results(它们将被删除)

答案 2 :(得分:0)

我知道这并不能完全回答您的问题,但您是否考虑过使用RavenDB的流媒体功能? https://ravendb.net/docs/article-page/3.5/csharp/client-api/session/querying/how-to-stream-query-results

在处理大量文档的许多情况下,与使用Query()进行迭代相比,这可能更快更简单。

但请注意,不会跟踪流式传输对象。意味着对这些对象的更改以及随之而来的SaveChanges() - 调用对RavenDB中存储的文档没有任何影响。