【问题标题】:How to search for multiple values within a field of Firebase Cloud documents?如何在 Firebase Cloud 文档的字段中搜索多个值?
【发布时间】:2020-04-07 13:34:05
【问题描述】:

所以我试图在我的 android 移动应用程序中创建一个收藏页面。这些产品在它们自己的顶级集合中,结构如下:

{
"Trainers": {
    "trainer1": {
        "brand": "Nike",
        "name": "Air Force 1",
        "colour": "Black"
        "url": ".................."   //FOR IMAGES

    },
    "trainer2": {
        "brand": "Adidas",
        "name": "Yeezy Boost 700",
        "colour": "Black"
        "url": ".................."   
    },
    "trainer3": {
        "brand": "Nike",
        "name": "Air Spiridons",
        "colour": "Cream"
        "url": ".................."   
    }
  }  
 }

然后我将拥有另一个顶级集合,其中包含名为用户 ID 的文档,后跟一组他们最喜欢的培训师“姓名”。但是,为了填充收藏页面,我需要在用户收藏文档中搜索每只鞋的“Trainer”集合。

回到我的问题,如果 User1 喜欢“Air Force 1 & Yeezy Boost 700”(或者可能比这更多的产品),是否可以查询文档“名称”字段等于多个值或有更好的方法来构建收藏夹活动吗?

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

    是否可以查询文档“名称”字段等于多个值的集合,或者是否有更好的方法来构建收藏夹活动?

    当然可以,使用最多可以包含 10 个值的数组。根据文档:

    同样,使用 array-contains-any 运算符将同一字段上的最多 10 个 array-contains 子句与逻辑 OR 组合起来。

    因此,在您的情况下,您应该使用以下查询:

    usersRef.whereArrayContainsAny("name", Arrays.asList("Air Force 1", "Yeezy Boost 700"));
    

    【讨论】:

    • 太好了,这也是我在搜索时发现的,但这是唯一的方法吗?因为它会将用户的最爱限制为 10 个。
    • Query 对象的每个get() 调用都会返回一个Task 对象。您可以创建多个此类对象和you can pass them to the whenAllSuccess() method。如果您需要超过 10 个元素,则可以采用这种方式。
    猜你喜欢
    • 2013-03-21
    • 2021-05-16
    • 2018-08-31
    • 1970-01-01
    • 2018-04-03
    • 2021-07-25
    • 2015-08-20
    • 1970-01-01
    • 2022-11-28
    相关资源
    最近更新 更多