【问题标题】:Flutter Firestore : How to do something similar to where('fieldName', arrayNotContains: 'something')?Flutter Firestore:如何做类似于 where('field Name', array Not Contains: 'something') 的事情?
【发布时间】:2021-03-08 08:56:07
【问题描述】:

我知道“arrayNotContains”不存在,我该怎么做:

我有用户。每个用户都有图片。 我想向其他用户显示一个用户的图片,但只显示一次。因此,当用户看到别人的图片时,他会将自己的 ID 添加到一个数组中,该数组是 Firestore 上图片文档的一个字段。像这样:

图像1 { '所有者': 'user1', '已经看到':['user2'] }

图像2 { '所有者': 'user1', '已经看过了': [] }

所以在这里我想向 user2 展示 user1 的图片,除了他已经看过的图片(这里是 Image1)。 我想做一个 Firestore 查询,如下所示:

FirebaseFirestore.instance.collection('Images')
.where('ownerID', isNotEqualTo: currentUserID) // to prevent displaying his own images
.where('alreadySeen', arrayNotContains: currentUserID) // to prevent displaying an image already seen

【问题讨论】:

    标签: flutter dart google-cloud-firestore


    【解决方案1】:

    您可以使用not-in 来避免在alreadySeen 集合中获取带有currentUserID 的图像。

    这里是 Firebase 文档中的一个示例:

    citiesRef.where('country', 'not-in', ['USA', 'Japan']);
    

    您可以在此处查看更多详细信息:Firebase documentation

    Dart 语法是:

    citiesRef.where('country', whereNotIn: ['USA', 'Japan'])
    

    【讨论】:

    • 谢谢,这是 Dart 语言吗?
    • 我刚刚用 Dart 语法更新了我的答案
    • 这不适用于数组。在此示例中,“国家”是一个字符串字段。 whereNotIn 检查国家是否不等于“美国”或不等于“日本”。在这个例子中,我想要的是'国家':['USA','Japan']。 CitiesRef.where('countries', arrayContains: 'Japan')
    • 能否请您发布您尝试过的解决方案。我相信一个很好的起点是按照这个答案上发布的官方文档在 Firestore 上执行查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 2018-11-21
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    相关资源
    最近更新 更多