RavenDB Python API,查询始终返回 128



我正在查询我的ravendb实例。我的目标集合包含超过 30k 个文档。我正在使用 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,这会导致无限循环。

知道为什么它会这样吗?

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

正确的代码如下:

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
看看

我的提交获取集合的所有文档 ID 的 RavenDB 以进行"每个文档"修改

在 pyravendb v3.5.3.5 中,我更新了 IndexQuery,现在您可以跳过或获取比 128 更少的或更多的文档。

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

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

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

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

最新更新