现在我想问一下这个问题是否像用户提出的那样。有没有办法做到这一点。
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
保存字符串类型的值,该值是您要查找的问题的实际id。
(用户ID+问题ID)——>文档唯一ID-questionID=true/false//其中questionID=每个文档的任何唯一ID。
这在Firestore中实际上是可能的,但前提是属性的名称不同
包含布尔值和
身份证件
属性,该属性保存字符串值。这可以通过链接两个来完成
whereEqualTo()
这样称呼:
Query query = db.collection("userLikeCollection")
.whereEqualTo("questionID", true)
.whereEqualTo("id", id);
根据你的评论:
whereEqualTo(“questionID”,true)只有在它被喜欢的时候才会出现,但当它被不喜欢的时候才会出现。它不会被检索到
没错。为了解决您的问题,根据有关
Query limitations
:
云火库
不支持
以下类型的查询:
-
!=
条款在这种情况下,应该将查询拆分为大于查询和小于查询。例如
通过组合两个查询可以得到相同的结果集,一个是
其中的条款(“年龄”、“<”、”30”)和一个带有该条款
其中(“年龄”,”>“,30).
换言之,这是不可能的
!=
(不等于)Firestore中的操作员。正如他们所说,您可以选择将查询拆分为
greater-than
和
less-than
查询,然后它将工作得非常好。
您还可以创建另一个如下所示的查询:
Query query = db.collection("userLikeCollection").whereEqualTo("questionID", false);
在这种情况下,您得到的问题具有
问题号
属性错误。
编辑2:
根据您编辑的问题,Firestore中没有基于动态id筛选文档的方法。也没有使用通配符的方法。属性应具有相同的名称。