如何在IndexedDB中执行JOIN类型查询

时间:2013-05-14 16:10:26

标签: javascript indexeddb

我已尝试在http://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/上关注在IndexedDB中执行查询的教程,但他们的示例不起作用。

如何在IndexedDB中执行JOIN类型查询?我已经使用索引设置了我的对象库,但我似乎无法获得语法?

1 个答案:

答案 0 :(得分:2)

IndexedDB是键值(文档)存储。它没有JOIN查询或查询多个对象库。但是,您可以在事务中查询多个商店。这就是假设在IndexedDB中进行连接查询的方式。

我使用我的库有一些写入建模关系http://dev.yathit.com/ydn-db/schema.html

以下是SELECT * FROM Supplier, Part WHERE Supplier.CITY = Part.CITY的加入查询。

var iter_supplier = new ydn.db.IndexValueIterator('Supplier', 'CITY');
var iter_part = new ydn.db.IndexValueIterator('Part', 'CITY');
var req = db.scan(function(keys, values) {
  var SID = keys[0];
  var PID = keys[1];
  console.log(SID, PID);
  if (!SID || !PID) {
    return []; // done
  }
  var cmp = ydn.db.cmp(SID, PID); // compare keys
  if (cmp == 0) {
    console.log(values[0], values[1]);
    return [true, true]; // advance both
  } else if (cmp == 1) {
    return [undefined, SID]; // jump PID cursor to match SID
  } else {
    return [PID, undefined]; // jump SID cursor to match PID
  }
}, [iter_supplier, iter_part]);

详情请见Join query article