Как мне сделать запрос типа JOIN в IndexedDB

Я пытался следовать руководству по адресу http://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/ отношении выполнения запросов в IndexedDB, но их пример не работает.

Как сделать запрос типа JOIN в IndexedDB? Я установил свои объекты в магазинах с индексами, но я просто не могу получить синтаксис?

1 ответ

Решение

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]);

Смотрите более подробную информацию в статье Присоединиться к запросу.

Другие вопросы по тегам