带有SQLite的PouchDb,查询

时间:2016-07-13 12:46:10

标签: android sqlite cordova pouchdb

我有一个包含数百个1 Mo文档的小包数据库,因此总大小约为100 Mo.它是Android Cordova应用程序,我使用的是:

  • PouchDb 5.4.5
  • cordova-plugin-sqlite-2 1.0.4

每份文件都是这样的:

{
    data: '...', // Very long string of 1 Mo
    filename: 'myFile', // Name of a file
    index: 34 // An integer
}

我想对这个数据库进行查询,列出所有按文件名和索引编制索引的文档,而不检索重data属性。

所以我做了这样的观点:

var designDoc = {
    _id: '_design/getByFilenameAndIndex',
    views: {}
};

mapFunction = function(doc){
    emit(doc.filename + '/' + doc.index);
}

designDoc.views['getByFilenameAndIndex'] = { map: mapFunction.toString() };

myDb.put(designDoc);

但是当我尝试查询我的数据库时,就像这样:

myDb.query('getByFilenameAndIndex', {include_docs: false}).then(function(docsByFilenameAndIndex){
    console.log(docsByFilenameAndIndex);
});

我收到以下错误:

error

为什么我出现此错误?我的设备上仍然有900 Mo的RAM(Android 6),我甚至不包括docs。如果我的数据库小于20 Mo,它可以正常工作。

在使用SQLite插件之前,使用40 Mo的数据库工作得很好,但是由于我需要超过50个Mo数据库,因此我无法工作。

修改:我试图这样做,我也收到错误:myDb.allDocs({include_docs: false});

1 个答案:

答案 0 :(得分:2)

您应该使用attachments,而不是直接在文档中插入大型二进制字符串。这些将确保当您执行不接触附件的操作(例如查询,allDocs()等)时,PouchDB将不会将附件读入内存。这应该可以解决你的内存不足问题。