当前位置: 首页 > 知识库问答 >
问题:

在Firestore中,如何在不为每个键创建索引的情况下进行涉及映射中键的复合查询?

谢哲瀚
2023-03-14

在Firestore中,如何在不为每个键创建索引的情况下进行涉及映射中键的复合查询?

例如,考虑一个保存博客文章的集合,每个博客文章都有类别。

Post {
    title: ..
    ...
    categories: {
        cats: true
        puppies: true
    }   
}

为了以分页的方式查询特定类别中的帖子,我们将执行如下操作:

let query = db.collection(`/posts`)
    .where(`categories.${categoryId}`, '==', true)
    .orderBy('createdAt')
    .startAfter(lastDate)
    .limit(5);

但是,这似乎需要为每个类别建立一个复合索引(categoryID>createdat)。有什么办法可以绕过这个吗?

在我的例子中,为每个类别创建复合索引是不可行的,因为类别是用户生成的,很容易超过200个(Firestore中复合索引的限制)。

共有1个答案

酆翔宇
2023-03-14

这可以通过将每个类别的值设置为您想要排序的类别来实现。Firestore有一个指南涵盖了这一点。

Post {
    title: ..
    ...
    categories: {
        cats: createdAt
        puppies: createdAt
    }   
}

let query = db.collection(`/posts`)
    .where(`categories.${categoryId}`, '>', 0)
    .orderBy(`categories.${categoryId}`)
    .startAfter(lastDate)
    .limit(5);
 类似资料:
  • 问题内容: 我使用以下两个带注释的类来构建图形: 现在,当我构建图形时,我发出两个查询以从任一表中获取所有行并设置子/父引用,为此我需要存储在表中的ID 。 因为我已经在JPA中定义了两个表之间的关系,所以当JPA提供者 懒惰地 *加载关联的节点时,访问边缘对象以获取两个节点的ID将触发每个边缘两个SQL语句。由于我已经有了节点对象,并且已经从边缘表中加载了ID,因此我想跳过这些查询,因为对于较大

  • 问题内容: 有谁知道如何在没有主键的情况下为表或视图进行hibernate映射? 问题答案: 不要认为Hibernate允许在没有主键的情况下映射表…考虑一下Hibernate如何在没有可以唯一标识行的列的情况下执行更新。 我猜想一种解决方法是对所有列使用复合键,但是最好添加主键。

  • b)对Employee类中的ReferencedColumnName='department id'使用@ManyToOne和@JoinColumn。 建议采用哪种方法?还是这两种方法用于完全不同的问题?

  • 我有2个表,即user和user_session。

  • 有没有办法创建一个同时包含键和值的映射(我指的是单行代码)?例如,我创建了一个名为map的映射,每当我想添加一对新的键/值时,我都需要使用方法“put”。当我们创建地图时,有没有一种更短的方法来填充它?

  • 问题内容: 我在一个网站中使用,其中我从中索引了数据。 这很好。但目前,我必须在字段中搜索的完全匹配项。目前,如果我搜索其条目,也会给出的结果。我找到了此链接,并且看到了需要在数据上添加的elasticsearch文档。我的问题是如何在当前情况下在数据上添加映射?还是有更好的方法呢? 问题答案: 删除现有索引 删除现有的河流配置索引 创建映射到索引 完成这些步骤后,将river插件配置同步mong