おっしゃる通り、PouchDB の同期は本当にやりたいことを実行しません。サーバー側の設計ドキュメントを使用して、データベース全体、またはデータベースの事前定義されたサブセットを同期するように設計されています。
私があなただったら、おそらくまだ PouchDB を使用するでしょうが、同期は手動で処理します。このようなもの:
var localDB = new PouchDB('localDB');
var remoteDB = new PouchDB('http://some-site.com:5984/somedb');
function searchForDocs(docId) {
// try the local DB first
localDB.get(docId).catch(function (err) {
if (err.name !== 'not_found') {
throw error;
}
// not found, so fall back to the remote DB
return remoteDB.get(docId).then(function (doc) {
// cache in the local DB
delete doc._rev;
return localDB.put(doc).then(function () {
return doc;
});
});
}).then(function (doc) {
// do something with our doc
}).catch(function (err) {
// handle any errors along the way
});
}
ここでの使用get()
は少し単純化されています。allDocs({startkey: query, endkey: query + '\uffff'})
ウィキペディアの場合、ID がクエリで始まるすべてのドキュメントを検索する必要があるでしょう。または、セカンダリ インデックスを使用することもできます。
したがって、PouchDB のビルトイン同期の利点は得られませんが、クライアントと同じコードをサーバーに対して記述できるという利点と、PouchDB のクロスブラウザー サポートの利点が得られます。ですから、このやり方が悪いとは思いません。