Firebase查询语句whereField(notIn)不起作用

时间:2020-10-21 07:18:10

标签: swift firebase

这是我的代码的一部分

db.collection("Activities").whereField("read", notIn: [Auth.auth().currentUser!.uid]).limit(to: 10).getDocuments{ (querySnapshot, error)

我可以看到我的uid是“ Y31FESSEmZgb6F9mPQoQLrgymnQ2”。

这是我的数据库图片

database document

但是查询结果中包含具有该uid的那些数据。似乎查询whereField复合不起作用。如何解决?

2 个答案:

答案 0 :(得分:0)

调用whereField(_:notIn:)时,您会将read数组与您作为notIn参数传入的数组中的每个元素进行比较。 notIn数组中的唯一元素是uid字符串。由于将数组(read)与字符串(uid)进行比较,因此得到了意外的结果。

如果我是您,我将尝试使用filter(using:)方法,看看是否能满足您的需求。这可能是您需要的:

let predicate = NSPredicate(format: "NOT (ANY read == %@)", Auth.auth().currentUser!.uid)
db.collection("Activities").filter(using: predicate)

答案 1 :(得分:0)

似乎“ notIn”是firebase的新命令,我想要的内容没有明确的示例。因此,我使用了一种笨拙的方法,该方法是手动设置限制,然后达到限制将打破循环。使用if array.contains查找数组中是否存在。