PouchDB-映射减少查询不适用于WebSQL适配器

时间:2018-08-03 08:47:21

标签: pouchdb

问题

地图缩减查询不适用于websql适配器

信息

  • 环境:Node.js
  • 平台:Mac / Windows 10
  • 适配器:WebSQL,HTTP
  • 服务器:CouchDB

复制

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查询。

1 个答案:

答案 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。