2013-09-27 61 views
1

以下是文檔http://dev.yathit.com/ydn-db/getting-started.html中的示例,這是「排序」下的第一個示例。如何檢索ydn-db中的對象的排序列表?

我的代碼:

var schema = { 
    stores: [ 
    { 
     name: "authors", 
     keyPath: "id", 
     indexes: [ 
     { keyPath: "born" } 
     ] 
    } 
    ] 
}; 
var db = new ydn.db.Storage("library", schema); 

db.put("authors", [{ id: "111", born: "zzz" }, { id: "555", born: "bbb" }, { id: "999", born: "aaa" }]).done(function() { 
    // query with default ordering 
    db.values("authors").done(function(r) { 
    console.log("A list of objects as expected", r); 
    }); 

    // query by ordered by "born" field 
    db.values(new ydn.db.Cursors("authors", "born", null, false)).done(function(r) { 
    console.log("This is a list of ids, not objects", r); 
    }); 
}); 

按特定的列從更改默認的排序順序來查詢似乎從返回的對象列表改變自己的行爲,只是在返回ID列表。難道我做錯了什麼?如何獲取對象列表?

回答

1

應該

// query by ordered by "born" field 
db.values(new ydn.db.IndexValueCursors("authors", "born", null, false)).done(function(r) { 
    console.log("list of objects sorted by born", r); 
}); 

// query by ordered by "born" field 
db.values("authors", "born", null, false).done(function(r) { 
    console.log("list of objects sorted by born", r); 
}); 

或者乾脆

db.values("authors", "born").done(function(r) { 
    console.log("list of objects sorted by born", r); 
}); 

一個好的API應該很容易做到這些常見的查詢,而無需閱讀文檔。我會考慮更好的API。現在,您需要了解迭代器的工作方式:http://dev.yathit.com/api-reference/ydn-db/iterator.html參考值ydn.db.Cursors是主鍵。這就是爲什麼 values返回列表主鍵。而ydn.db.IndexValueCursors的參考值是 的記錄值,所以values返回對象列表。實際上,這些是IndexedDB API的工作原理。

另一點是以上兩個查詢有不同的性能特徵。第二種方法,直接查詢比使用迭代器的第一種方法快。這是因爲迭代器會迭代,而第二種方法將使用批量查詢。由於不支持迭代,因此websql的性能差別很大。

+1

感謝您的實質性答案。第三個工作正常,第二個也是,但我不得不將其更改爲 var limit = 999; db.values(「authors」,「born」,null,limit).done(...); 否則我得到「ydn.error.ArgumentException:限制必須是一個數字。」 –