2016-07-21 3 views
1

Я использую PouchDb и плагин PouchDb-find для запроса моей локальной БД в ионном веб-приложении. Почти в каждом случае использования, я получаю следующее предупреждение при запросе в то время как я создал индекс:PouchDb find: почему мой индекс не используется?

{ 
    "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' не использует ни одного индекса ни вправо? Кстати, я не знаю, какие операторы используют или нет индекс, но я думаю, что это можно было бы упомянуть в readme проекта, чтобы избежать подобных вопросов. Жду вашего ответа на мой вопрос в этом комментарии, чтобы принять ваш первоначальный ответ. – bgondy

Смежные вопросы