Couchdb 更改:仅筛选来自其他DB实例的更改

Couchdb 更改:仅筛选来自其他DB实例的更改,couchdb,pouchdb,Couchdb,Pouchdb,我的应用程序有一个与中央couchdb同步的本地数据库 当应用程序从changes提要接收到更改时,它会更新模型和ui 这只应发生在本地未发生的更改上: 当本地(由用户在ui中)发生更改时,应用程序将使用更改的属性更新模型。然后,它将(db.put)更新的对象放入本地Pocket数据库(触发更改事件)。当put的响应到达时,应用程序更新模型中的rev属性 问题1:是否可以将db.changes筛选为仅本地数据库实例中未生成的更改 因为我没有找到上述问题的解决方案,所以我现在将本地模型对象与db.

我的应用程序有一个与中央couchdb同步的本地数据库

当应用程序从changes提要接收到更改时,它会更新模型和ui

这只应发生在本地未发生的更改上:

当本地(由用户在ui中)发生更改时,应用程序将使用更改的属性更新模型。然后,它将(db.put)更新的对象放入本地Pocket数据库(触发更改事件)。当put的响应到达时,应用程序更新模型中的rev属性

问题1:是否可以将db.changes筛选为仅本地数据库实例中未生成的更改

因为我没有找到上述问题的解决方案,所以我现在将本地模型对象与db.changes交付的已更改文档进行比较(通过比较字符串化的值)

问题是:db.changes的更改事件发生在db.put的响应到达之前!目前,我的应用程序尚未更新模型对象的版本,这使得比较这两个对象非常困难-它们总是不同的,因为版本不同

我必须补充一点,对象的结构是灵活的,因为用户可以配置自己的数据结构。因此,我无法(轻松地)比较可能已更改的字段。如果没有更好的方法,我将不得不基于这个想法破解一个解决方案

因此问题2是:是否可以让更改事件等待db.put的响应到达之后

我想我可以用一个setTimeout,但这似乎很难


非常感谢您的帮助。

这是PockDB中的一个已知错误,但现在应该修复它:请参阅

你能试试看这是否仍然是个问题吗?如果是这样,请随时在Github上提交另一个问题。谢谢


编辑:要回答你的第一个问题,有点棘手。我认为最好的方法是在文档中插入一些信息,以跟踪文档的生成位置。(例如,您可以使用
Math.random()
为您的用户提供一个随机ID,将其存储在localStorage或作为_LocalDoc,然后将其包含在每个文档中。)

非常感谢!我将尝试向文档添加ID以过滤更改流。我通过npm使用PockDB,所以我不想尝试夜间构建,将本地DB实例的ID添加到更改的文档中,并从更改流中过滤这些文档,效果很好