Couchbase Lite 视图在任何文档更新后都不起作用
Couchbase Lite views doesnt work after any document update
- 我们有 couchbase lite 应用程序。我们使用视图在应用程序上显示数据。有一个设计文档,其中包含四个视图。
- 设计文档和视图是在数据库准备就绪后创建的。视图仅创建一次。
当我们更改任何文档或创建一个本应转到视图的新文档时,视图会停止在下一次查询时返回文档。它给出了错误
{"error":"bad_request","status":400,"reason":"Router unable to route request to do_GET_DesignDocumentcom.couchbase.lite.CouchbaseLiteException: Cannot index view cceDesignDoc/draftTransactionView: no map block registered, Status: 400 (HTTP 400 bad_request)"}
当我们使用 Couchbase Lite 1.4.0 时,视图有效。当我们升级到 1.4.4 时,它 不起作用 。
我们正在通过 REST 使用视图 API 类似于以下内容:
相关代码见下方:
// This method is called when app starts up. It is called only once.
public createView(){
this.platform.ready().then(() => {
(new Couchbase()).openDatabase(AppUrl.LOCAL_DB_NAME).then(database => {
this.database = database;
let views = {
myAbcTransactionView: {
map: function (doc) {
if (doc.type == "myAbcTransaction") {
emit(doc._id, doc)
}
}.toString()
},
johnAbcTransactionView: {
map: function (doc) {
if (doc.type == "johnAbcTransaction") {
emit(doc._id, doc)
}
}.toString()
},
peterAbcTransactionView: {
map: function (doc) {
if (doc.type == "peterAbcTransaction") {
emit(doc._id, doc)
}
}.toString()
},
jennaAbcTransactionView: {
map: function (doc) {
if (doc.type == "jennaAbcTransaction") {
emit(doc._id, doc)
}
}.toString()
}
};
this.database.createDesignDocument("_design/abcDesignDoc", views);
this.database.listen(change => {
this.listener.emit(change.detail);
});
}
}
//This method is called to show records in the view on the screen
public showRecords() {
this.couchbase.getDatabase().queryView("_design/abcDesignDoc", "peterAbcTransactionView", {}).then((result: any) => {
this.transactions = [];
for (var i = 0; i < result.rows.length; i++) {
this.zone.run(() => {
this.transactions.push(result.rows[i].value);
this.transactions.sort(function (b, a
) {
return a.theDate - b.theDate;
});
});
}
}, error => {
});
}
版本信息:
离子:
ionic(离子 CLI):4.7.1 (AppData\Roaming\npm\node_modules\ionic)
离子框架:ionic-angular 3.3.0
@ionic/app-scripts:1.3.7
科尔多瓦:
cordova(Cordova CLI):8.1.2(cordova-lib@8.1.1)
科尔多瓦平台:android 7.1.4
Cordova 插件:没有列入白名单的插件(总共 14 个插件)
系统:
NodeJS : v6.14.4 (C:\Program Files\nodejs\node.exe)
npm:3.10.10
OS : Windows 10
Couchbase 精简版:1.4.4
Couchbase-Lite-PhoneGap-Plugin: (https://github.com/couchbaselabs/Couchbase-Lite-PhoneGap-Plugin)
参见:https://github.com/couchbaselabs/Couchbase-Lite-PhoneGap-Plugin/issues/109
这个分支应该根据问题工作:https://github.com/lasselaakkonen/Couchbase-Lite-PhoneGap-Plugin/tree/fix-cordova-android-7-dependencies
我们发现couchbase-lite 1.4.4存在上述错误的问题。当我们安装 couchbase-lite 1.4.0 之后一切都会正常工作。
- 我们有 couchbase lite 应用程序。我们使用视图在应用程序上显示数据。有一个设计文档,其中包含四个视图。
- 设计文档和视图是在数据库准备就绪后创建的。视图仅创建一次。
当我们更改任何文档或创建一个本应转到视图的新文档时,视图会停止在下一次查询时返回文档。它给出了错误
{"error":"bad_request","status":400,"reason":"Router unable to route request to do_GET_DesignDocumentcom.couchbase.lite.CouchbaseLiteException: Cannot index view cceDesignDoc/draftTransactionView: no map block registered, Status: 400 (HTTP 400 bad_request)"}
当我们使用 Couchbase Lite 1.4.0 时,视图有效。当我们升级到 1.4.4 时,它 不起作用 。
我们正在通过 REST 使用视图 API 类似于以下内容:
相关代码见下方:
// This method is called when app starts up. It is called only once.
public createView(){
this.platform.ready().then(() => {
(new Couchbase()).openDatabase(AppUrl.LOCAL_DB_NAME).then(database => {
this.database = database;
let views = {
myAbcTransactionView: {
map: function (doc) {
if (doc.type == "myAbcTransaction") {
emit(doc._id, doc)
}
}.toString()
},
johnAbcTransactionView: {
map: function (doc) {
if (doc.type == "johnAbcTransaction") {
emit(doc._id, doc)
}
}.toString()
},
peterAbcTransactionView: {
map: function (doc) {
if (doc.type == "peterAbcTransaction") {
emit(doc._id, doc)
}
}.toString()
},
jennaAbcTransactionView: {
map: function (doc) {
if (doc.type == "jennaAbcTransaction") {
emit(doc._id, doc)
}
}.toString()
}
};
this.database.createDesignDocument("_design/abcDesignDoc", views);
this.database.listen(change => {
this.listener.emit(change.detail);
});
}
}
//This method is called to show records in the view on the screen
public showRecords() {
this.couchbase.getDatabase().queryView("_design/abcDesignDoc", "peterAbcTransactionView", {}).then((result: any) => {
this.transactions = [];
for (var i = 0; i < result.rows.length; i++) {
this.zone.run(() => {
this.transactions.push(result.rows[i].value);
this.transactions.sort(function (b, a
) {
return a.theDate - b.theDate;
});
});
}
}, error => {
});
}
版本信息: 离子:
ionic(离子 CLI):4.7.1 (AppData\Roaming\npm\node_modules\ionic) 离子框架:ionic-angular 3.3.0 @ionic/app-scripts:1.3.7
科尔多瓦:
cordova(Cordova CLI):8.1.2(cordova-lib@8.1.1) 科尔多瓦平台:android 7.1.4 Cordova 插件:没有列入白名单的插件(总共 14 个插件)
系统:
NodeJS : v6.14.4 (C:\Program Files\nodejs\node.exe) npm:3.10.10 OS : Windows 10
Couchbase 精简版:1.4.4
Couchbase-Lite-PhoneGap-Plugin: (https://github.com/couchbaselabs/Couchbase-Lite-PhoneGap-Plugin)
参见:https://github.com/couchbaselabs/Couchbase-Lite-PhoneGap-Plugin/issues/109
这个分支应该根据问题工作:https://github.com/lasselaakkonen/Couchbase-Lite-PhoneGap-Plugin/tree/fix-cordova-android-7-dependencies
我们发现couchbase-lite 1.4.4存在上述错误的问题。当我们安装 couchbase-lite 1.4.0 之后一切都会正常工作。