2013-09-27 2 views
1

여기의 문서의 예제 다음에 http://dev.yathit.com/ydn-db/getting-started.html, "Sorting"의 첫 번째 예가 나와 있습니다.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 : limit가 숫자 여야합니다." –