现在我想查询这个问题是否是用户喜欢的。有没有办法实现它。
db.collection("userLikeCollection").where(questionID).exist()
是的,有。要解决这个问题,您应该使用查询和get() 调用。在代码中它看起来像这样:
Query query = db.collection("userLikeCollection").whereEqualTo("questionID", true);
query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
if (document.exists()) {
Boolean questionID = document.getBoolean("questionID");
}
}
}
}
});
在此代码中,查询将帮助您查找其中questionID 属性将包含true 值的所有文档,并且使用document.exists() 将帮助您查找该文档是否确实存在。
或读取具有属性字符串名称 questionID 的文档
db.collection("userLikeCollection").whereStringProperty(questionID).exist()
在这种情况下,您还应该使用查询,但不应将布尔值传递给 whereEqualTo() 方法,而应传递文字字符串:
Query query = db.collection("userLikeCollection").whereEqualTo("questionID", id);
其中id 包含一个String 类型的值,这是您要查找的问题的实际ID。
(userID + questionID) -> 文档唯一 ID - questionID = true/false //其中 questionID = 每个文档的任何唯一 ID。
这在 Firestore 中实际上是可能的,但前提是属性的名称不同,例如 questionID 包含一个布尔值和一个 id 属性包含一个字符串值。这可以通过像这样链接两个 whereEqualTo() 调用来完成:
Query query = db.collection("userLikeCollection")
.whereEqualTo("questionID", true)
.whereEqualTo("id", id);
编辑:
根据您的评论:
whereEqualTo("questionID", true) 只在喜欢的时候出现,不喜欢的时候出现。它不会被检索到
没错。为了解决您的问题,根据Query limitations的官方文档:
Cloud Firestore 不支持以下类型的查询:
带有 != 子句的查询。在这种情况下,您应该将查询拆分为大于查询和小于查询。例如,
虽然不支持查询子句 where("age", "!=", "30"),
您可以通过组合两个查询来获得相同的结果集,一个与
子句 where("age", "”,30)。
也就是说,Firestore 中没有 !=(不等于)运算符。正如他们所说,您可以选择将您的查询拆分为 greater-than 和 less-than 查询,然后它就可以正常工作了。
您还可以创建另一个查询,如下所示:
Query query = db.collection("userLikeCollection").whereEqualTo("questionID", false);
在这种情况下,您会得到questionID 属性为假的问题。
编辑2:
根据您编辑的问题,Firestore 中无法根据动态 id 过滤文档。也没有办法使用通配符。属性应具有相同的名称。