地图缩减查询不适用于websql适配器
const PouchDB = require("pouchdb-core");
PouchDB
.plugin(require("pouchdb-adapter-node-websql"))
.plugin(require("pouchdb-adapter-http"))
.plugin(require("pouchdb.mapreduce.noeval"))
.plugin(require("pouchdb-replication"));
var websqlDB = new PouchDB("db_test.sql", { adapter: "websql" });
var serverDB = new PouchDB("http://localhost:5984/db_test");
async function test(db) {
const itemView = {
_id: "_design/item", views: {
item: {
map: function (doc) {
try {
emit(doc);
} catch (err) { }
}.toString()
}
}
};
try { await db.put(itemView); } catch (e) { console.log(e); }
await db.post({name: "name"});
const docs = await db.query("item");
return docs;
}
async function run() {
console.log("query websql db");
console.log(await test(websqlDB));
console.log("query couch db");
console.log(await test(serverDB));
}
run().then().catch(err => console.log(err));
输出
query websql db
{ total_rows: 0, offset: 0, rows: [] }
query couch db
{ total_rows: 1,
offset: 0,
rows:
[ { id: 'fa2e86f972cb38d80530b734bc00bf4d',
key: [Object],
value: null } ] }
似乎查询不适用于websql适配器。当我对其查询时,它什么也不返回。我们在Mac和Windows平台上都注意到此问题。这是我使用的版本:
{
"pouchdb-adapter-cordova-sqlite": "^2.0.5",
"pouchdb-adapter-http": "^6.4.3",
"pouchdb-adapter-node-websql": "^7.0.0",
"pouchdb-core": "^6.4.3",
"pouchdb-find": "^6.4.3",
"pouchdb-replication": "^6.4.3",
"pouchdb-upsert": "^2.2.0",
"pouchdb.mapreduce.noeval": "^0.2.0"
}
不确定是我的代码问题还是websql实际上无法使用map reduce查询。
答案 0 :(得分:0)
我无法在github上找到pouchdb-adapter-node-websql,但是如果它与pouchdb-adapter-websql-core相似,则不再受支持。
结果,我发现在更新后第一次使用索引时索引将中断。具体来说,allDocs方法的'keys'选项对我不起作用,这导致pouchdb-abstract-mapreduce模块的getKeyValueDocs方法无法正常工作,并返回所有文档。使用此方法更新索引后,除从索引中删除更新的文档外,它会导致所有文档。结果-在任何不包含最新更新文档的查询中,您将一无所获。
我确实发现this repository可以将pouchdb-adapter-websql-core修复为react-native。它可能也适用于Cordova。