1

按照此处的文档http://dev.yathit.com/ydn-db/getting-started.html的示例,“排序”下的第一个示例。

我的代码:

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 列表。难道我做错了什么?如何获取对象列表?

4

1 回答 1

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 的性能差异很大,因为它不支持迭代。

于 2013-09-27T05:00:20.267 回答