【发布时间】:2018-09-26 05:58:01
【问题描述】:
我已经设置了一个选择器,我的 pouchDB 基于该选择器同步文档。
这里是选择器。它将获取所有 type="job" 的文档,并且在权限数组中包含 1371 ID 或任何 type="load" 的文档。
const myselector = {
$or: [
{
type: {
$eq: 'job'
},
permission: {
$elemMatch: { $eq: 1371 }
}
},
{
type: {
$eq: 'load'
}
}
]}
这是我同步的方式
this.db.replicate
.from(this.remoteDB, {
selector: myselector
})
.on('complete', info => {
// then two-way, continuous, retriable sync
this.db
.sync(this.remoteDB, {
live: true,
retry: true,
selector: myselector
})
.on('change', change => {
console.log('my change0', change);
})
.on('error', error => {
console.log('my error', error);
});
})
.on('error', error => {
console.log('my error2', error);
});
这非常有效,它会告诉我是否有任何文档发生了变化,但是如果我在权限数组中进行了更改并且 id 1371 发生了更改,那么它不会通知我更改。现在,如果我更改该文档中的任何其他字段,它不会被复制,因为它不再被同步。
我正在使用 Selector 而不是 CouchDB 过滤器,因为它们显然快 10 倍,但这种同步成为一个问题。
如果文档发生更改并且不再符合选择器标准,则不会调用 change 函数。
【问题讨论】: