首页 > 解决方案 > PouchDB - Map reduce 查询不适用于 websql 适配器

问题描述

问题

Map reduce 查询不适用于 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 查询。

标签: pouchdb

解决方案


我在 github 上找不到 pouchdb-adapter-node-websql,但如果它与 pouchdb-adapter-websql-core 类似,则不再支持。

结果,我发现索引会在更新后第一次消耗索引时中断。特别是 allDocs 方法的 'keys' 选项对我不起作用,这导致 pouchdb-abstract-mapreduce 模块的 getKeyValueDocs 方法无法正常工作,返回所有文档。当在此方法之后更新索引时,它会导致所有文档,除了更新的文档被从索引中删除。结果 - 在任何不包括您上次更新的文档的查询中,您将一无所获。

我确实找到了这个存储库,它为 react-native 修复了 pouchdb-adapter-websql-core。它也可能适用于科尔多瓦。


推荐阅读