【发布时间】:2022-08-14 05:21:21
【问题描述】:
我正在尝试计算我的数据库表中满足特定条件的孩子的数量。如果isSeen 列等于false,那么我想计算它,如果它等于true,我不想计算它。
目前,它不起作用,但如果我将查询从 Query query = usersRef.orderByChild(\"isSeen\").equalTo(true); 更改为 Query query = usersRef.orderByChild(\"isSeen\"); 我会得到一个数字,但这不是正确的方法。有人可以帮帮我吗?
规则:
{
\"rules\": {
\".read\": true,
\".write\": true,
\"Messages\": {
\".indexOn\": \"isSeen\"
}
}
}
\"Messages\": {
\"b3vYlKZFrje0e3wHyBlWIK4ooK93\": {
\"DIt5bGqw2WS4eGHNqQJKxZSn3B72\": {
\"-N8NCgnwX6V7ghfGlcWS\": {
\"dateAdded\": 1659337356887,
\"date_time\": \"Aug-01-2022 3:02:36 AM\",
\"from\": \"DIt5bGqw2WS4eGHNqQJKxZSn3B72\",
\"isSeen\": true,
\"message\": \"Yoo\",
\"to\": \"b3vYlKZFrje0e3wHyBlWIK4ooK93\",
\"type\": \"text\"
},
\"-N99iQjlMfeyOM_VCAEB\": {
\"dateAdded\": 1660184797462,
\"date_time\": \"Aug-10-2022 10:26:37 PM\",
\"from\": \"DIt5bGqw2WS4eGHNqQJKxZSn3B72\",
\"isSeen\": true,
\"message\": \"Wassup\",
\"to\": \"b3vYlKZFrje0e3wHyBlWIK4ooK93\",
\"type\": \"text\"
}
}
}
},
DatabaseReference usersRef = FirebaseDatabase.getInstance().getReference(\"Messages\");
Query query = usersRef.child(firebaseUser.getUid()).orderByChild(\"isSeen\").equalTo(true);
query.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
long count = task.getResult().getChildrenCount();
Log.d(\"TAG1\", \"count: \" + count);
} else {
Log.d(\"TAG2\", task.getException().getMessage()); //Never ignore potential errors!
}
}
});
错误信息:
D/TAG2: Index not defined, add \".indexOn\": \"isSeen\", for path \"/Messages/b3vYlKZFrje0e3wHyBlWIK4ooK93\", to the rules
-
你的
isSeen值是布尔值吗?还是一个字符串?如果isSeen中存储的值是字符串,那么您需要使用字符串值而不是布尔值。.equalTo(\"true\") -
这是一个布尔值@MarcAnthonyB
-
您是否有任何将
isSeen的值设置为 true 的记录?请使用@AlexMamo 回复 -
不,这都是假的@AlexMamo
-
如果一切都是假的,你如何期望得到结果?我不确定我是否理解问题所在。
标签: java android firebase google-cloud-platform firebase-realtime-database