Я установил селектор, и моя pouchDB синхронизирует документы на основе этого селектора.
Вот селектор.Он получит все документы типа = "job", которые содержат 1371 идентификатор в массиве разрешений ИЛИ любой документ типа = "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);
});
Это прекрасно работает и сообщает мне, есть ли изменения в каком-либо документе, но если, например, я внес изменения в массив разрешений и идентификатор 1371 изменился, он не уведомляет меня об этом изменении.Теперь, если я изменю любое другое поле в этом документе, оно не будет реплицировано, поскольку оно больше не синхронизировано.
Я использую Selector вместо фильтров CouchDB, поскольку они, по-видимому, в 10 раз быстрее, но эта синхронизация становится проблемой.
Если документ изменился и больше не попадает в критерии выбора, то функция change
не вызывается.