相关疑难解决方法(0)

使用多个条件查询

我最近发现(遗憾的是)HTML5不再支持WebSQL,而且IndexedDB将替代它.

我想知道是否有任何方法可以查询或搜索IndexedDB的条目,方式与我如何使用SQL搜索满足多个条件的条目类似.

我已经看到我可以使用KeyRange的一个条件搜索IndexedDB.但是,我似乎无法找到任何方法来搜索两列或更多列数据,而无需从数据库中获取所有数据并使用for循环执行此操作.

我知道这是一个新功能,几乎没有在浏览器中实现,但我有一个项目,我正在开始,我正在研究我可以做的不同方式.

谢谢!

javascript indexeddb

32
推荐指数
2
解决办法
3万
查看次数

Javascript:使用多个索引搜索indexeddb

我想从WebSql更改为Indexeddb.但是,如何进行SQL查询

SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com'
SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com' and age = 30
SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com' and name = 'Bill'
etc
Run Code Online (Sandbox Code Playgroud)

使用IndexedDB?例如,我在阅读indexedDb 的文档时注意到,所有示例当时只查询一个索引.所以你可以做到

var index = objectStore.index("ssn");
index.get("444-44-4444").onsuccess = function(event) {
     alert("Name is " + event.target.result.name);
};
Run Code Online (Sandbox Code Playgroud)

但我需要同时查询多个索引!

我还发现了一些关于复合索引的有趣帖子,但它们只有在查询复合索引中的所有字段时才有效.

javascript web-sql indexeddb

17
推荐指数
1
解决办法
1万
查看次数

如何创建indexeddb组合键

我花了几个小时来搜索这个,只是通过反复试验才能最终找到解决方案.在Stack Overflow中记录此信息,供将来的搜索者使用.

问:

如何在indexeddb中创建复合键?

使用以下内容在对象库上的indexeddb中创建键:

var db;
var openRequest = indexedDB.open('myDB', 1);
openRequest.addEventListener('error', () => {
    console.error('Unable to open db');
});
openRequest.addEventListener('upgradeneeded', function(event){
    var store = db.createObjectStore('myStore', 
        {keyPath: /* composite key */ }
    );
});
openRequest.addEventListener('success', function(){
    db = openRequest.result;
});
Run Code Online (Sandbox Code Playgroud)

我尝试过放置对象,多次定义,如何创建复合键,或者这是API的限制?

注意:如果您正在寻找如何使用范围查询复合键,请查看文章

composite-primary-key indexeddb

13
推荐指数
2
解决办法
3565
查看次数

对indexedDB查询的结果进行排序

我想对从indexedDB获得的结果进行排序.
每条记录都有{id,text,date}结构,其中'id'是keyPath.

我想按日期对结果进行排序.

我目前的代码如下:

  var trans = db.transaction(['msgs'], IDBTransaction.READ);
  var store = trans.objectStore('msgs');

  // Get everything in the store;
  var keyRange = IDBKeyRange.lowerBound("");
  var cursorRequest = store.openCursor(keyRange);

  cursorRequest.onsuccess = function(e) {
    var result = e.target.result;
    if(!!result == false){
        return;
    }
    console.log(result.value);
    result.continue();
  };
Run Code Online (Sandbox Code Playgroud)

javascript indexeddb

10
推荐指数
3
解决办法
1万
查看次数

索引数据库游标范围在多个属性上

我在indexeddb对象库上有两个属性的复合索引,并希望根据这两个属性的范围检索游标.

这是商店中的示例对象:

{species: 'Oak',xcoord: 123456, ycoord: 654321}
Run Code Online (Sandbox Code Playgroud)

和索引:

treeStore.createIndex("treelocation", ["xcoord","ycoord"], { unique: false });
Run Code Online (Sandbox Code Playgroud)

索引创建是成功的,我可以在Chrome开发人员工具中看到它,但是现在我想在x和y坐标上打开一个带有键范围的光标(这将是地图的范围).

在线搜索我看不到怎么做,打开带有一系列键范围的索引似乎不起作用.

谢谢

安德鲁

javascript indexeddb

7
推荐指数
2
解决办法
3218
查看次数

indexeddb中的where子句的等效项

假设我们为todolist建立了一个数据库,并希望查询所有重要且尚未完成的项目.在SQL中,我将使用类似的东西

SELECT * FROM todolist WHERE important = true AND state <> 'done'
Run Code Online (Sandbox Code Playgroud)

我们如何在indexeddb nosql数据库中执行该类型的请求?有索引吗?其他方式?不可能?

据我所知过滤结果important = true:

objectstore.index('important').openCursor(IDBKeyRange.only('true'))
Run Code Online (Sandbox Code Playgroud)

但我不知道如何过滤,state <> 'done'因为我们只得到了IDBKeyRange.only(z).

我不知道如何过滤这两个条款.

注意:在MongoDB中我们做:

db.userdetails.find({"date_of_join" : "16/10/2010","education":"M.C.A."})
Run Code Online (Sandbox Code Playgroud)

where-clause indexeddb

4
推荐指数
2
解决办法
5623
查看次数

IndexedDB中的OR或IN操作

有没有办法在IndexedDB中对同一属性执行OR或IN查询?

换句话说,我如何得到结果,

SELECT * FROM MyTable WHERE columnA IN ('ABC','DFT') AND columnB = '123thd'
Run Code Online (Sandbox Code Playgroud)

谢谢!

indexeddb

4
推荐指数
1
解决办法
321
查看次数

使用较短的数组查询 IndexedDB 复合索引

IndexedDB 允许您在多个属性上创建索引。就像你有对象一样,{a: 0, b: 0}你可以在a和上创建索引b

复合索引的行为非常奇怪,但显然应该可以使用比复合索引短的数组进行查询。所以在我的例子中,我应该能够查询类似的东西[0]并获得 a==0 的结果。

但我似乎无法让它发挥作用。这是您可以在 JS Bin 上运行的示例:

var db;

request = indexedDB.open("test", 1);
request.onerror = function (event) { console.log(event); };

request.onupgradeneeded = function (event) {
  var db = event.target.result;
  db.onerror = function (event) { console.log(event); };

  var store = db.createObjectStore("store", {keyPath: "id", autoIncrement: true});
  store.createIndex("a, b", ["a", "b"], {unique: true});

  store.add({a: 0, b: 0});
  store.add({a: 0, b: 1});
  store.add({a: 1, b: 0});
  store.add({a: …
Run Code Online (Sandbox Code Playgroud)

javascript indexeddb

2
推荐指数
2
解决办法
1218
查看次数