【问题标题】:Query Firestore field/value using multiple multiple 'where' values?使用多个“where”值查询 Firestore 字段/值?
【发布时间】:2021-02-10 05:23:29
【问题描述】:

我正在考虑让用户在应用中关注其他用户,并且会收到他们关注的人的帖子。

有没有办法一次查询多个“where”语句,或与列表进行比较?还是需要另辟蹊径?

这是 NodeJS 中的一个示例场景:

var usersFollowed = ['GKXgK2CPPGPQjmQ3Lsrh', 'cBjzo3MSjjaOHksVmO0o', 'tc9gMwZR9SiyjWonyCWF'];

var followingPosts = await db.collection('posts').where('posterUID', '==', usersFollowed.Any()).get();

(.Any()是编造的,我想做的事)

以下是 Firestore 中帖子文档的示例:

postID
    caption: 'a picture of something'
    type: 'picutre'
    size: 1
    posterUID: GKXgK2CPPGPQjmQ3Lsrh

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    您应该使用in 运算符:“使用in 运算符将同一字段上的最多10 个相等(==) 子句与逻辑OR 组合在一起。in 查询返回给定字段的文档匹配任何比较值”。

    var usersFollowed = ['GKXgK2CPPGPQjmQ3Lsrh', 'cBjzo3MSjjaOHksVmO0o', 'tc9gMwZR9SiyjWonyCWF'];
    var followingPosts = await db.collection('posts').where('posterUID', 'in', usersFollowed).get();
    

    但请注意,您最多只能组合 10 个相等 (==) 子句。

    如果您需要合并超过 10 个子句,您将需要执行几个类似的查询并合并结果。这个article 解释了如何使用 JS SDK 合并两个查询。

    【讨论】:

    • 这不起作用,因为 posterUID 是一个字符串。我正在更新问题以反映这一点,无论如何,谢谢。
    • 对不起,我的错...应该是in 运算符。我要重写答案。
    猜你喜欢
    • 1970-01-01
    • 2021-08-14
    • 2019-04-05
    • 2020-07-14
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    相关资源
    最近更新 更多