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 但内容不同的文档,则在同步(复制)时会发生冲突。如果您与设计文档有冲突,那么基本上一个修订版(几乎是任意选择的)将是 "live" 一个,另一个将是惰性的,有点像一个不再有人关心的旧 Git 分支.
换句话说(如果我理解正确的话),您应该尝试在 CouchDB 和 PouchDB 中存储相同的文档。 (一个简单的方法是将文档存储在 PouchDB 上,然后将其复制到 CouchDB,反之亦然。)
我有一个简单的 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 但内容不同的文档,则在同步(复制)时会发生冲突。如果您与设计文档有冲突,那么基本上一个修订版(几乎是任意选择的)将是 "live" 一个,另一个将是惰性的,有点像一个不再有人关心的旧 Git 分支.
换句话说(如果我理解正确的话),您应该尝试在 CouchDB 和 PouchDB 中存储相同的文档。 (一个简单的方法是将文档存储在 PouchDB 上,然后将其复制到 CouchDB,反之亦然。)