繁体   English   中英

PouchDB到CouchDB同步将过滤器另存为视图

[英]PouchDB to CouchDB sync saves filters as views

我有简单的PouchDB实例,一个用于本地浏览器,一个用于远程。 我有一个带有过滤器的设计文档,当我发出同步时,它另存为视图。

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中查看文档时看不到过滤器?

您要保存两个不同的文档,一个带有视图(在CouchDB中),另一个带有过滤器(在PouchDB中)。

根据经验,如果您存储具有相同ID但内容不同的文档,则在同步(复制)时会发生冲突。 如果您与设计文档有冲突,那么基本上一个版本(几乎是任意选择的)将是“实时”版本,而一个版本将是惰性的,有点像一个老的Git分支,不再有人在乎。

换句话说(如果我理解正确的话),您可能应该尝试在CouchDB和PouchDB中存储相同的文档。 (一种简单的方法是将文档存储在PouchDB上,然后将其复制到CouchDB,反之亦然。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM