这是我的代码的一部分
db.collection("Activities").whereField("read", notIn: [Auth.auth().currentUser!.uid]).limit(to: 10).getDocuments{ (querySnapshot, error)
我可以看到我的uid是“ Y31FESSEmZgb6F9mPQoQLrgymnQ2”。
这是我的数据库图片
但是查询结果中包含具有该uid的那些数据。似乎查询whereField复合不起作用。如何解决?
答案 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查找数组中是否存在。