【问题标题】:how to query nested maps inside an array field in firebase如何在firebase的数组字段中查询嵌套地图
【发布时间】:2023-03-31 15:28:02
【问题描述】:

我在 Firebase 中构建了我的数据,这样我就有了一个“用户”集合,每个用户都有不同的字段以及一个包含地图项目的“skillsIndustry”数组字段(具有“经验”和“行业”字段)。

现在我想查询我的用户集合,以便我可以查询所有曾在“航空公司”工作过且经验代码为 >= 1 的用户

这可能吗?还是我必须创建子集合然后使用集合组查询?

非常感谢

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    不,这是不可能的。您可以使用array-contains 查询整个对象,如SO answer 中所述,但不能使用><. 进行查询

    您可以创建一个子集合,但您可能会根据同一文档中的数据重复找到解决方案,这是 NoSQL 世界中的常用方法。

    例如,您可以有一些名为airlinesExperienceshippingExperience 等的额外字段。然后,当您想显示所有技能和多年经验时,您可以使用skillsIndustry 数组字段,但您使用@ 987654328@要查询的字段。


    另一种可能性是使用键/值对的映射,例如

    key = "Airlines" / value = 1
    
    key = "Shipping" / value = 3
    

    然后你可以查询:

      firebase
        .firestore()
        .collection('users')
        .where('skillsIndustry.Shipping', '>', 2)
    

    【讨论】:

    • 添加一些附加信息:如果您想查询“没有没有运输经验的用户”,您需要为skillsIndustry.Shipping 因为如果文档中的字段没有值,则不会将其添加到其索引中。如果1/2/3 对应于某个枚举(例如little experiencesome experience 等),则应将值隔开一些并使用10/20/@ 987654340@(通常较大,例如 100/200/300/etc),它使您可以灵活地插入新级别,而无需重写数据库中的每个文档。
    猜你喜欢
    • 2019-01-05
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多