Я использую 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.
Любая идея?
Благодарим вас за ответ. Использование '{$ gt: 0, $ lt: 0}' очень умно. Я полагаю, что мой второй вариант использования с '$ not', глубоким свойством и' $ size' не использует ни одного индекса ни вправо? Кстати, я не знаю, какие операторы используют или нет индекс, но я думаю, что это можно было бы упомянуть в readme проекта, чтобы избежать подобных вопросов. Жду вашего ответа на мой вопрос в этом комментарии, чтобы принять ваш первоначальный ответ. – bgondy