当前位置: 首页 > 面试题库 >

Firestore:在android中查询数组中的所有元素

高墨一
2023-03-14
问题内容

我有一个像这样的数据结构

 /Split       // Collection
   {authid}   // Document
      /SentIvitation //Collection
          {auto-id}  //Documnet
            amount    //array
             0:10
             1:10
             2:10
             Phonenumbers//array
               0:987654321
               1:123456789
               2:234567890

我需要查询“电话号码”中的所有元素,并且必须检查这些电话号码是否已存在于另一个集合中。我的数据结构的下一条路径是

/deyaUsers   //Collection
  {authid}.   //Documnet
      Name: "abc"
      Email: "abc@gmail.com"
      Phonenumber:987654321

是否可以在Firestore中进行任何索引编制?


问题答案:

如官方文档中所示:

尽管Cloud Firestore可以存储阵列,但可以 it does not support 查询阵列成员或更新单个阵列元素。

如果只想获取整个papers数组,则需要Map像这样迭代:

Map<String, Object> map = documentSnapshot.getData();
for (Map.Entry<String, Object> entry : map.entrySet()) {
    if (entry.getKey().equals("Phonenumbers")) {
        Log.d("TAG", entry.getValue().toString());
    }
}

但是请注意,即使Phonenumbers对象作为数组存储在数据库中,也entry.getValue()返回ArrayList,而不是array

仅当使用一个以上的属性查询数据库时,才需要使用索引。但事实并非如此。

如果考虑使用这种替代数据库结构,则更好的方法是,其中每个电话号码都是地图中的键,所有值都为true:

Phonenumbers: {
    "987654321": true,
    "123456789": true,
    "234567890": true
}

编辑2018年8月13日:

根据有关数组成员资格的更新文档,现在可以使用whereArrayContains()方法基于数组值过滤数据。一个简单的例子是:

CollectionReference citiesRef = db.collection("cities");
citiesRef.whereArrayContains("regions", "west_coast");

该查询返回每个城市文档,其中region字段是包含west_coast的数组。如果数组具有您查询的值的多个实例,则该文档仅包含在结果中一次。



 类似资料:
  • 问题内容: 最近升级到使用PostgreSQL 9.3.1来利用JSON功能。在我的表中,我有一个json类型列,其结构如下: 就问题而言,这只是伪数据。 是否可以根据id在emails数组中查询特定项目? 差不多:“返回电子邮件,其中id = 123)”? 问题答案: 是的,这是可能的: 是您的表名,是JSON列的名称。

  • 我有一个如下所示的数据库表: 我想使用PostgreSQL的JSON查询功能来选择JSON\u数组中的某些子字典,例如字典中的a:1。 输出应为 以下查询适用于每个数组中的第一个元素,但我想检查所有元素:

  • 最近我一直在玩Geohash和FiRecovery。我的待办事项场景是收集文档(餐厅),每个餐厅都会有发送到的Geohash列表。 我想避免在文档餐厅中添加地理位置,因为文档可能比它应该的大很多倍。 最初的想法是将所有地理哈希都放在餐厅文档的子集合中,但我发现不可能在文档的子集合中执行查询。 第二个想法是将Geohash提取到交付区域集合的顶层。 这个场景中的问题是,我将返回一个餐厅名称列表,然后

  • 我正在使用Firebase Firestore作为BaaS构建一个应用程序。 但当我尝试在我的应用程序上创建提要/实现全文搜索时,我面临一个问题。 我希望能够搜索所有用户的帖子,问题是,用户帖子在Firestore数据库中的结构如下: 帖子(收藏)- 我想遍历每个用户的用户帖子子集合并获取提要的所有数据,并使用Algolia或ES等全文搜索应用程序来实现它。 > 我可以遍历特定的用户ID(代码如下

  • 最近升级到使用PostgreSQL 9.3.1来利用JSON功能。在我的表中,我有一个json类型列,其结构如下: 就问题而言,这只是虚拟数据。 是否可以根据id查询电子邮件数组中的特定项目 差不多:“返回id=123的电子邮件)”?

  • 问题内容: 老实说,这个问题很简单。有没有一种方法可以快速查找数组中某个元素的所有出现而无需循环遍历它?似乎所有内置方法仅返回第一次出现的索引,而不是全部返回。 拥有返回索引数组的样式方法将是很不错的。有什么想法吗? 预先感谢您的任何投入! 编辑: 感谢大家的回复!看来我应该对此更加清楚。我目前的操作方式是扩展,其外观与下面发布的一个哑光非常相似。我知道,任何执行此操作的方法都必须在内部遍历数组,