ravendb python api,总是查询 return 128
ravendb python api, query always return 128
我正在查询我的 ravendb 实例。我的目标集合包含 30k 多个文档。我在 python 3.
中使用 pyravendb
我正在使用以下代码查询我的索引:
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
start是我每次查询时递增128的偏移量变量。
当我 运行 此代码时,结果的长度始终为 128,这会导致无限循环。
知道为什么会这样吗?
我知道这不能完全回答您的问题,但您是否考虑过使用 RavenDB 的流式处理功能? https://ravendb.net/docs/article-page/3.5/csharp/client-api/session/querying/how-to-stream-query-results
在许多情况下,当处理大量文档时,与使用 Query() 进行迭代相比,这可能更快更简单。
但是请注意,不会跟踪流式传输的对象。对这些对象的意义更改以及随后的 SaveChanges() 调用不会对存储在 RavenDB 中的文档产生任何影响。
问题出在我使用的参数上。应该使用的正确参数是 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
看看我的提交
在 pyravendb v3.5.3.5 中,我更新了 IndexQuery,现在您可以跳过或获取比 128 更少或更多的文档。
其他不要使用 total_size 或 skipped_results(它们将被删除)
我正在查询我的 ravendb 实例。我的目标集合包含 30k 多个文档。我在 python 3.
中使用 pyravendb我正在使用以下代码查询我的索引:
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
start是我每次查询时递增128的偏移量变量。 当我 运行 此代码时,结果的长度始终为 128,这会导致无限循环。
知道为什么会这样吗?
我知道这不能完全回答您的问题,但您是否考虑过使用 RavenDB 的流式处理功能? https://ravendb.net/docs/article-page/3.5/csharp/client-api/session/querying/how-to-stream-query-results
在许多情况下,当处理大量文档时,与使用 Query() 进行迭代相比,这可能更快更简单。
但是请注意,不会跟踪流式传输的对象。对这些对象的意义更改以及随后的 SaveChanges() 调用不会对存储在 RavenDB 中的文档产生任何影响。
问题出在我使用的参数上。应该使用的正确参数是 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
看看我的提交
在 pyravendb v3.5.3.5 中,我更新了 IndexQuery,现在您可以跳过或获取比 128 更少或更多的文档。
其他不要使用 total_size 或 skipped_results(它们将被删除)