gpt4 book ai didi

java - 在 firestore 中搜索子文档值

转载 作者:行者123 更新时间:2023-12-02 00:28:39 27 4
gpt4 key购买 nike

我正在使用具有以下结构的 firestore 数据库:

我有一个名为NBDB的集合,里面有带有每个用户的uid的文档。例如,我有 2 个用户,所以我有 2 个文档,名为:ZxK2BR...xy9BHY...

在每个用户文档中,还有另一个名为 MyBooks 的集合,并且包含用户搜索的所有图书的文档。

以下是我的数据库中的图片: enter image description here

enter image description here我想要制作类似主页屏幕的效果,该屏幕将显示用户应用程序数据库中所有图像中的 20 张随机图像。

根据我的理解,我需要进入每个用户文档并搜索它拥有的所有我的书籍,然后移动到下一个用户。

我的最终目标是读取所有用户的 BookID 值并随机选择 20 个

我使用以下方法从特定用户获取所有BookID:

FirebaseFirestore db = FirebaseFirestore.getInstance();
CollectionReference MyDB = db.collection( "NBDB" ).document(auth.getUid()).collection( "MyBooks" );

MyDB.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
List<String> list = new ArrayList<>();
for (QueryDocumentSnapshot document : task.getResult()) {
list.add(document.getString( "BookID" ));
}
Log.d(TAG, list.toString());
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});

谢谢

最佳答案

我认为您想要做的是从任何用户的子集合中随机提取 20 张不同的图像。也就是说,如果您不选择使用其他结构并希望嵌套所有数据,则可以选择 collectionGroup 查询。

“随机”部分有点棘手,您可能需要使用一些巧妙的方法来使其发挥作用。但首先要访问各个用户的嵌套子集合:

所有这些数据,无论用户是谁,都位于名为 MyBooks 的集合中,因此您可以在 MyBooks 上运行 collectionGroup 查询。

我的做法是,使用随机图像 hacky 位,使用部分伪代码来给您一个想法(我在 Java SDK 中确认了 collectionGroups):

usedImages = []
for numbers 0 to 19 {
let num = false
while (!num) {
let tempNum = Math.floor(Math.random() * 10);
if (!( usedImages.includes(tempNum)){
num = tempNum
}
}

var allBooks = db.collectionGroup('MyBooks').where('imageKey', '==', num);
allBooks.get().then(function (querySnapshot) {
querySnapshot.forEach(function (doc) {
console.log(doc.id, ' => ', doc.data());
});
});

}

代码的想法是生成 20 个随机且唯一的数字 num (可能比我上面编写的方法更好),然后获取该数字并查找中的所有条目imageKey 所在的 MyBooks 。这是围绕随机图像代码的 hacky 方法,您需要为每个图像添加一个全局唯一的 ID。

集合组不指定父集合的路径,因此它允许您一次查看所有集合。

在上面的伪代码中,您正在运行 20 个集合组查询。

您可以在此处找到有关集合组查询的更多信息:https://firebase.google.com/docs/firestore/query-data/queries#collection-group-query

关于java - 在 firestore 中搜索子文档值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58034319/

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