【问题标题】:How do I do an JOIN-type query in IndexedDB如何在 IndexedDB 中执行 JOIN 类型的查询
【发布时间】:2013-05-14 16:10:26
【问题描述】:

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

如何在 IndexedDB 中进行 JOIN 类型的查询?我已经为我的对象存储设置了索引,但我似乎无法理解语法?

【问题讨论】:

    标签: javascript 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]);
    

    Join query article上查看更多详情。

    【讨论】:

    • @Kyaw,你有一个漂亮的包裹。现在使用它进行连接,我得到一些输出到控制台。我想知道如何通过角度将这种连接查询的结果输入我的前端,比如说$scope.myResult = ??
    • @Rexford 我认为您需要调用 $scope.apply 来通知 AngularJs 摘要循环。 stackoverflow.com/questions/20737343/…
    • @KyawTun 我这样做了,结果进入了 html,但是,它们在数组中成对出现。我不知道如何在 html 中使用 ng-repeat 进行迭代,所以我想在发送到 html 之前添加 values[0] 和 values[1],但仍然有显示问题。用你的包显示连接输出的推荐方法是什么?你会怎么做?这是我发布的问题,寻求帮助:stackoverflow.com/questions/36390024/…
    • @Rexford Please use sorted merge join dev.yathit.com/ydn-db/doc/query/key-joining.html 有一个例子(但不是在AngularJS中)。
    • @KyawTun 谢谢。今天晚些时候将进行更深入的研究。
    猜你喜欢
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 2019-11-01
    相关资源
    最近更新 更多