我正尝试缩短我的数据。因此,我决定将 userLikeCollection 另存为
true means like and false means dislike
->其中neither like nor disliked
。如果该文档不存在,则意味着它是db.collection("userLikeCollection").where(questionID ).exist()
...
,其中的ID包含(用户ID +问题ID )
现在,我想查询这个问题是否与用户相似。有没有办法实现它。
db.collection("userLikeCollection").whereStringProperty(questionID).exist()
或 阅读该文件,该文件的属性字符串名称为questionID
template<typename H, typename B>
struct A {
typedef H value_type;
template<typename I>
A(B b, I i) {
std::cout << i << b << std::endl;
}
operator int() {
return 5;
}
};
int main() {
int a = A<float>(1, "Hello!");
return 0;
}
其中 userLikeDocument 如下所示
(用户ID +问题ID )->文档唯一ID -questionID = true / false //其中,questionID =每个文档的唯一ID。
编辑问题
UserLikeDocument-1
UserLikeDocument-2
UserLikeDocument-3
UserLikeDocument-4
答案 0 :(得分:1)
现在,我想查询这个问题是否与用户相似。有没有办法实现它。 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。
(用户ID + QuestionID)->文档唯一ID-questionID = true / false //其中,questionID =每个文档的任何唯一ID。
这实际上在Firestore中是可能的,但是只有在属性名称不同的情况下,例如questionID
拥有布尔值,而id
属性则拥有String值。可以通过链接两个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”)和一个带子句的子句 where(“ age”,“>”,30)。
换句话说,Firestore中没有!=
(不等于)运算符。正如他们所说,您可以选择将查询分为greater-than
和less-than
查询,然后将其正常运行。
您还可以创建另一个如下所示的查询:
Query query = db.collection("userLikeCollection").whereEqualTo("questionID", false);
在这种情况下,您会得到一个questionID
属性为false的问题。
编辑2:
根据您已编辑的问题,Firestore中无法基于动态ID过滤文档。也没有办法使用通配符。这些属性应具有相同的名称。