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