您好,我刚刚尝试使用Firestore。获取文档ID时遇到了一些问题。
问题是,我想得到一个文件ID(红色框),里面有值(蓝框)。
我使用以下查询:
collection("mychannel").whereEqualTo("74wRU4xHrcV9oWAXEkKeRNp41c53")
但没有给出结果。
谢谢!
答案 0 :(得分:2)
虽然Cloud Firestore可以存储数组,
it does not support
查询数组成员或更新单个数组元素。
因此,无法可以使用以下查询:
collection("mychannel").whereEqualTo("74wRU4xHrcV9oWAXEkKeRNp41c53")
如果您只想获取整个userId
数组,则需要迭代Map
,如下所示:
collection("mychannel").document("1fReXb8pgQvJzFdzpkSy").get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
Map<String, Object> map = document.getData();
for (Map.Entry<String, Object> entry : map.entrySet()) {
if (entry.getKey().equals("userId")) {
Log.d("TAG", entry.getValue().toString());
}
}
}
}
}
});
但请注意,即使userId
对象作为数组存储在数据库中,entry.getValue()
也会返回ArrayList
,而不是array
。
所以输出将是:
[74wRU4xHrcV9oWAXEkKeRNp41c53]
如果您考虑使用这种替代数据库结构,其中每个用户ID都是映射中的键并且所有值都为真,那么更好的方法是:
userId: {
"74wRU4xHrcV9oWAXEkKeRNp41c53": true,
"AdwF...": true,
"YsHs...": true
}
答案 1 :(得分:1)
这个问题在这里得到解答:Firestore: Query by item in array of document
总之,不要使用数组在Firestore中存储数据,因为您尝试执行的查询尚不可用(请记住它仍处于测试阶段)。你应该使用Map。