2016-07-21 76 views
1

我正在使用PouchDb和插件PouchDb查找離子網站應用程序中查詢我的本地數據庫。在幾乎所有的使用情況下,我查詢而我創建索引時收到以下警告:PouchDb找到:爲什麼我的索引不被使用?

{ 
    "docs": { 
     ... 
    }, 
    "warning": "no matching index found, create an index to optimize query time" 
} 

從插件文件的例子開始,我得到這樣的警告,所以我想知道我在做什麼錯。

下面是一個例子:

var db = new PouchDB('test'); 

var docs = []; 
for (var i = 0; i < 10; i++) { 
    docs.push({title: 'Lorem ipsum ' + i, _id: 'doc' + (i + 1)}); 
} 

db.bulkDocs(docs) 
    .then(
    function() { 
     return db.createIndex({index: {fields: ['title']}}); 
    }) 
    .then(
    function() { 
     // return db.find({selector: {title: {$eq: 0}}}); // No warning 
     return db.find({selector: {title: {$ne: 0}}}); // Warning 
    }) 
    .then(
    function (res) { 
     console.log(res); 
    }) 
    .catch(console.error.bind(console)); 

爲什麼指數採用$eq時和使用不符合$ne

然後,我有以下查詢(假設'a.deep.property'總是存在並且是一個陣列)的更復雜的情況下:

db.find(
    { 
     selector: { 
      $not:{ 
       "a.deep.property": {$size:0} 
      } 
     } 
    } 
); 

我已經創建了一個索引與場'a.deep.property'。該索引也不被使用。我需要創建什麼索引?

我也嘗試手動創建一個索引,並在前一種情況下使用query(),但這比使用PouchDb-find要慢。

有什麼想法?

回答

2

$ne當前不使用任何索引。您將不得不使用類似$gt$lt的東西。例如。而不是$ne: 0你會做{$gt: 0, $lt: 0}

+0

謝謝你的回答。使用'{$ gt:0,$ lt:0}'很聰明。我想我的第二個用例'$ not',一個很深的屬性和'$ size'不會使用任何索引嗎?順便說一下,我不知道哪些操作員正在使用或不使用索引,但我認爲可能會在項目自述中提及避免這類問題。在這個評論中等待你對我的問題的回答,接受你的初步答案。 – bgondy

相關問題