IndexedDB Dexie eachUniqueKey和Where子句

qqrboqgw  于 2022-12-09  发布在  IndexedDB
关注(0)|答案(1)|浏览(238)

我正在Quasar/Electron中开发一个应用程序,并在我的数据库中使用Dexie/IndexedDB。我想在数据库中找到包含我的事件ID和狗ID(都是键索引字段)的所有不同记录。我可以使用以下代码完成此操作:

await myDB.runTable
   .orderBy('[fk_event+fk_dog]')
   .eachUniqueKey((theDuo) => {
   this.runsArray.push({eventID: theDuo[0], dogID: theDuo[1]})
  })

我使用的是组合键,运行良好。但是,我需要更多的记录,而不仅仅是键。我需要更多的字段,这可能吗?
我试图在使用where函数的同时使用唯一键函数获取记录,但似乎不起作用。
我需要得到所有独特的(distinct?)在表中的狗是在一个特定的事件。也得到他们相应的信息。我不知道是否有一个更好的,更有效的方法来做到这一点?我总是可以取出所有的记录,并循环通过他们来建立一个自定义数组,我只是希望在表读取级别上这样做。(是的,我仍然在表/记录中,即使这些是集合等:p)。
即使上面的代码给了我所有的事件,我也可以用一个过滤器提取出我需要的东西。我只是在想,在读取级别做这件事会更快更有效。

this.enteredRuns = this.runsArray.filter((theEvent) => {
    return ( (theEvent.eventID == this.currentEventID) )
  })
vfhzx4xs

vfhzx4xs1#

尝试

await myDB.runTable
  .orderBy('[fk_event+fk_dog]')
  .clone({unique: "unique"})
  .toArray()

我知道这是没有记录,但它应该做的工作,使用独特的光标,同时仍然提取整个对象,而不仅仅是键。你不能与where合并,但你可以使用.filter。只是要注意,不是所有的记录都被扫描,因为它会跳过记录与相同的键-选择第一次访问的记录只。

相关问题