PouchDB to CouchDB sync сохраняет фильтры в виде представлений

У меня есть простые экземпляры PouchDB один для локального браузера и один удаленный. У меня есть документ design, который принимает фильтр, когда я выполняю синхронизацию, он сохраняется как представление.

var localDB = new PouchDB('mydb');
var remoteDB = new PouchDB('http://anna:secret@127.0.0.1:5984/db');

Когда я выполняю ниже, он сохраняется как вид

localDB.sync(remoteDB)

{
    "_id": "_design/sync",
    "_rev": "2-f6db221d90157a99f4e6e9e6e27ffe85",
    "views": {
        "by_user": {
            "map": "function (doc) {n  emit(doc._id, 1);n}"
        }
    }
}

когда это написано как ниже на моем клиентском скрипте

localDB.put({
        _id : '_design/sync',
        filters: {
            by_user : function(doc, req) {
                return doc._id.indexOf(req.query.user) > 0;
            }.toString()
        }
    }).then().catch(function(err) {});

Итак, почему я не могу видеть фильтры в моем документе при просмотре в CouchDB ?

1 ответ

  1. Вы сохраняете два разных документа, один с видом (в CouchDB) и один с фильтром (в PouchDB).

    Эмпирическое правило, если вы храните документ с тем же идентификатором, но другим содержимым, вы получите конфликты при синхронизации (репликации). Если у вас есть конфликт с проектным документом, то в основном одна ревизия (выбранная довольно произвольно) будет «живой», и один будет инертным, вроде старой ветви Git, о которой больше никто не заботится.

    Другими словами (если я правильно вас понял), вы, вероятно, должны попытаться сохранить идентичный документ в CouchDB и PouchDB. (Простой способ сделать это-сохранить документ в PouchDB, а затем скопировать его в CouchDB или наоборот.)