【问题标题】:How do I get multiple records from an indexedDB index using NgxIndexedDB?如何使用 NgxIndexedDB 从 indexedDB 索引中获取多条记录?
【发布时间】:2019-02-26 23:55:52
【问题描述】:

我使用NgxIndexedDB 创建了一个IndexedDB 数据库,并创建了一个不唯一的索引。当我使用getByIndex() 读取记录时,它只返回一条记录,尽管我知道有更多记录匹配。获取所有匹配记录的机制是什么?

this.db = new NgxIndexedDB(‘mydb’, 1);
this.db.openDatabase(1, evt => {
  let objectStore = evt.currentTarget.result.createObjectStore(‘amp’, 
    {keyPath: '_id', autoIncrement: false });
  console.log("Open DB is called...")
  objectStore.createIndex(‘empname’, ‘empname’, { unique: false });
});

this.db.getByIndex(‘amp,’empname’,’Dave’).then(names => {
  console.log(names);
  resolve(names);  
},
error => {
  console.log(error);
});

【问题讨论】:

  • 请提供getByIndex的定义或更详细的NgxIndexedDB描述。需要它来帮助回答您的问题。
  • 我根据这里给出的信息使用了这个。 npmjs.com/package/ngx-indexed-db (npm install ngx-indexed-db) getByIndex(storeName: string, indexName: string, key: any): Promise;这是那里给出的用法示例 db.getByIndex('people', 'name', 'Dave').then( person => { console.log(person); }, error => { console.log(error); });
  • 我已编辑问题以添加参考文档
  • 文档说 getByIndex 返回一个项目。您是否尝试过使用 getAll? github.com/assuncaocharles/ngx-indexed-db/blob/master/projects/…
  • 我试过 getALL(没有任何参数)。它正在检索集合中的整个记录​​集。但我只需要那个特定的匹配条件。但是他们提到了 getAll 的另一个参数,即索引详细信息。我不确定这是否可行? getAll(storeName: string, keyRange?: IDBKeyRange, indexDetails?: IndexDetails): Promise;但是我已经尝试但没有成功拨打该电话并且正在重新调整错误

标签: javascript indexeddb


【解决方案1】:

经过一些试验和错误,我能够根据 Josh 的线索使用 getAll 函数来做到这一点。谢谢乔希。这是方法。

  this.db.openDatabase(1, evt => {
      let objectStore = evt.currentTarget.result.createObjectStore(‘empCollection’, { keyPath: '_id', autoIncrement: false });
      console.log("Open DB is called...")
      objectStore.createIndex(‘empname’, ‘empname’, { unique: false });
    });


    let index_detail:IndexDetails = {
      indexName: 'empname',
      order: 'asc'
    }


 this.db.getAll(‘empCollection’,IDBKeyRange.only(“Dave”),index_details).then(
          names => {
            console.log(names);
          },
          error => {
            console.log(error);
          }
        );

【讨论】:

  • 你是如何在 this.db.getAll('empCollection',IDBKeyRange.only(“Dave”),index_details).then( names => { console.log(names); }, 错误 => { console.log(error); } );
  • 可以在 indexdetails 中提及的搜索条件
  • 对不起,你能解释得更好吗?
  • 我不确定我是否理解你的问题。在正常情况下 this.db.getAll('empCollection').then( outpout => { console.log(output); ==>>OUTPUT===>> }, error => { console.log(error); });此查询返回“输出”变量中该集合记录中所有记录的列表,我已在控制台中打印出来以进行测试。我发表的具体帖子是显示,而不是所有记录,我想过滤具有一些匹配条件的记录(这里所有包含名称“Dave”的记录..如果您需要更多信息,请详细说明您的问题
  • 这里输出的是一个json数组列表“names”
猜你喜欢
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
相关资源
最近更新 更多