gpt4 book ai didi

java - 如何获取 Firestore 集合中所有文档的名称(字段)?

转载 作者:太空宇宙 更新时间:2023-11-04 09:26:29 24 4
gpt4 key购买 nike

我正在尝试向我的第一个基本应用程序添加一个很好的功能,该应用程序连接到 Firestore 数据库,获取其中集合中文档的所有名称并将它们存储在字符串的 ArrayList 中。如下所示,数据库非常简单,包含一个名为 pedestals 的集合,其中仅包含 3 个文档。每个文档有 4 个字段(jack、jack_laser、name 和 sum): Firestore snapshot of my database

通过使用 pedestals.whereEqualTo("name", true).get() 我猜对所有名称的查询已初始化,但我不确定如何从中提取名称。我观看了许多 youtube 视频并尝试了 firestore 的 google code-lab 部分,但它们每个都处理查询文档并存储其数据 - 虽然在这里我不想获取所有文档,只想获取其名称字段的值。

相关方法代码如下:

 private void myFirstQuery2() {
// Get a reference to the pedestal collection
final CollectionReference pedestals = mFirestore.collection("pedestals");

// get all the names of the pedestals in firestore
pedestals.whereEqualTo("name", true).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
for (QueryDocumentSnapshot document : task.getResult()) {
// names.add(document.getString("name"));
names.add(document.getData().toString());
}
String str = Arrays.toString(names.toArray());
Log.e(TAG, "god job: " +str);
Toast.makeText(FileLoading.this, "success!", Toast.LENGTH_LONG).show();
}//end of onSuccess
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(FileLoading.this, "error!", Toast.LENGTH_LONG).show();
Log.e(TAG, "could not get the query");
}
});
};

正如您所见,我尝试实现一个 for 循环,将每个文档快照(即使我正在寻找字段而不是文档。这是问题吗?)存储在数组中。

在 logcat 终端中我得到:

08-24 17:41:45.786 10738-10738/benda.leveling_v2 E/MyActivity: god job: []

这让我明白数组列表是空的。

我在这里做错了什么?

最佳答案

While here I don't want to get all the documents, only the values of their name fields.

您无法从文档中仅获取 name 属性的值。在 Coud Firestore 中,没有字段级权限或对文档的访问权限。它是整个文档,或者什么也没有。 Firestore 客户端 SDK 始终返回完整的文档。不幸的是,尽管服务器端 SDK 的 select() 中确实存在此选项,但客户端 SDK 无法仅请求文档的一部分。方法。

此外,当使用以下代码行时:

pedestals.whereEqualTo("name", true)

这意味着您正在搜索 pedestals 集合中属性 name 包含 true 值的每个文档。由于该属性保存的是字符串而不是 boolean 值,因此无法返回任何结果。一个可能的查询是:

pedestals.whereEqualTo("name", "site3")

它将返回屏幕截图中的第三个文档。如果您想获取文档的name属性或id,请使用以下代码行:

pedestals.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Log.d(TAG, document.getId() + " => " + document.getString("name"));
Map<String, Object> map = document.getData();
}
}
}
});

如果您想获取这些数组,请注意,即使在数据库中这些属性的类型为array,当您获取它们时,对象的类型为List。另一种解决方案可能是迭代map并获取相应的值。

关于java - 如何获取 Firestore 集合中所有文档的名称(字段)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57640399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com