Database Dexie:如何获得多项目索引的所有值?

Database Dexie:如何获得多项目索引的所有值?,database,dexie,Database,Dexie,我有这些对象,每个对象都有一个“标记”数组: bookmarks: [ { url: '...', tags: ['news', 'fun', 'programming'] }, { url: '...', tags: ['news'] }, { url: '...', tags: ['fun', 'cooking'] }, { url: '...', tags: ['hobby', 'fun'] } ] DB: 接收包含所有标记的数组(或集合)的最佳(也是最有

我有这些对象,每个对象都有一个“标记”数组:

bookmarks: [
    { url: '...', tags: ['news', 'fun', 'programming'] },
    { url: '...', tags: ['news'] },
    { url: '...', tags: ['fun', 'cooking'] },
    { url: '...', tags: ['hobby', 'fun'] }
]
DB:

接收包含所有标记的数组(或集合)的最佳(也是最有效)方式是什么:

['news', 'fun', 'programming', 'cooking', 'hobby']
(有没有办法获取“标记”索引本身的所有值?)


编辑:要显示带有数字的“标记云”,我需要读取书签表中的所有标记。因此,我不需要书签对象本身,只需要它们的“标记”数组。

我建议使用索引过滤掉至少包含一个标记的所有书签,然后手动过滤掉:

const tagsToRequire=[“新闻”、“乐趣”、“编程”、“烹饪”、“爱好”];
const bookmarksWithFirstTag=wait db.bookmarks
.where({tags:tagsToRequire[0]})
.toArray();
constbookmarkhithalltags=bookmarkhithfirsttag.filter(bookmark=>tagsToRequire.every(tag=>bookmark.tags.includes(tag));
您也可以对所有标记使用索引,但不确定是否会获得更好的性能,因为它需要更多的DB请求。另一方面,在第一个索引非常常用且对象很大的情况下,第二个示例的性能可能会更好:

const tagsToRequire=[“新闻”、“乐趣”、“编程”、“烹饪”、“爱好”];
const key=wait Promise.all(tagsToRequire.map)(tag=>
其中({tags:tag}).primaryKeys());
const intersectedKeys=keys.reduce((上一个,当前)=>prev.filter(键=>curr.includes(键));
constbookmarkhithalltags=wait db.bookmark.bulkGet(intersectedKeys);

第二个示例还需要具有bulkGet()操作的Dexie版本3.x。

对于“标记云”,我需要所有书签中的所有标记(带数字),您已经回答了。这实际上回答了我的第二个(更复杂)要求:用户可以选择(切换)来自标签云的多个标签,然后所有带有所选标签的书签都应该返回并显示。非常感谢您的快速回复!
['news', 'fun', 'programming', 'cooking', 'hobby']