在changefeeds上使用includeTypes标志

时间:2016-08-02 01:04:45

标签: rethinkdb

来自:https://rethinkdb.com/docs/changefeeds/javascript/#including-result-types

  • 是否可以进一步定义uninitial?如果initial只是我在开始Feed之前发生的add,那么我该如何获得uninitial

  • 如何获得state?将includeInitial, includeState, includeTypes设置为true后,我会获得单独的状态文档,但不会获得type: state接口。

1 个答案:

答案 0 :(得分:1)

对于您链接的文档的“包含初始值”部分中的“未初始化”结果有更好的解释。引用:

  

如果文档的初始结果已发送并且对该文档进行了更改,则会将其移动到结果集的未发送部分(例如,更改源会监视前100个海报,前50个已经过已发送,并且海报48已成为海报52),将发送“无意”通知,其中包含old_val字段但没有new_val字段。

这些存在的原因是由于RethinkDB更改源如何实现初始结果逻辑。在表的密钥空间中,从左到右或多或少地处理初始结果。始终存在用于发送初始结果的密钥空间的片段,以及更改源已经开始实时“流式传输”当前更新的剩余片段。当您首次使用includeInitial: true打开更改源时,整个键范围将处于初始化状态。然后,当初始结果通过更改源发送时,初始化和流式传输部分之间的关​​键边界移动,更多的键空间变为流式传输。

如果文档的密钥从已经流式传输的密钥空间的一部分移动到仍在初始化的部分,则会发生

uninitial值。这只能用于使用二级索引的更改源,因为给定文档的主键永远不会更改。

关于state:我似乎正好收到type: "state"文件。例如:

r.table('t1').changes({includeStates: true, includeInitial: true, includeTypes: true})

{  "state": "ready" , 
   "type": "state" } 

{  "state": "initializing" , 
   "type": "state" } 

你没有收到这些文件吗?