【问题标题】:React Native Firebase Array Query to do ArrayContains with AND operationReact Native Firebase Array Query 使用 AND 操作执行 ArrayContains
【发布时间】:2021-01-02 08:16:53
【问题描述】:

我有group 收藏。在每个group 文档中,我通过firebase 中的成员数组字段存储了哪些用户与该组相关联。

例如:user1 & user2xyz(id) 组中,我想从客户端查询以获取所有组拥有 user1user2 (不是 OR )。我试过 firebase IN 数组查询,但它返回空结果。有没有办法使用 AND 进行查询,我正在使用 react native 制作聊天应用程序。

我的代码(不工作:)

firestoreRef.collection('group').where('members','in',[ id_of_user1, id_of_user2 ]).get(); // return empty array

【问题讨论】:

    标签: javascript node.js firebase react-native google-cloud-firestore


    【解决方案1】:

    首先,以当前的 firebase 功能,您想要做的事情是不可能的。相信大家已经看过了,不过here是firestore的数组相关查询的文档,都不支持AND操作。

    话虽如此,这有点像 hack,但我做了一些类似于你想做的事情。

    您将创建一个字段,将所有用户的 uid 组合成单个字符串,然后使用该字段进行查询。

    例如,假设您有以下两个用户:

    user1
    uid: 'abc'
    
    user2
    uid: 'def'
    

    然后在他们的group 文档中,创建一个字段,我们现在称之为memberKey 并将他们组合的用户ID 存储为单个字符串:

    {
      'memberKey': 'abcdef'
    }
    

    现在您可以通过在客户端结合他们的uid来查询user1和user2所在的组以获取目标文档。

    但是这里有一个问题。你怎么知道哪个uid先出现?你怎么知道它是'abcdef'而不是'defabc'?嗯,就这么简单。您只需按字母数字顺序对 uid 列表进行排序。这样,您将始终拥有一致的memberKey

    您甚至可以将此方法扩展到 2 个以上的用户。

    我知道这不是您希望的一个非常漂亮的解决方案,但是由于 Firestore 目前的限制,我们不得不像这样变得聪明。

    【讨论】:

    • 完美的解决方案,是的,我已经添加了你提到的member-key,并堆栈在哪个id优先并查询key,排序将挽救我的生命,非常感谢您的支持。跨度>
    猜你喜欢
    • 2021-09-11
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    相关资源
    最近更新 更多