java– 从Firestore中选择随机文档[复制]

java– 从Firestore中选择随机文档[复制],第1张

概述参见英文答案>Firestore:Howtogetrandomdocumentsinacollection                                    5个我在CloudFirestore的单个集合中有1000个文档,是否可以获取随机文档?比如说:学生是Firestore的一个系列,我在该系列中有1000

参见英文答案 > Firestore: How to get random documents in a collection                                    5个
我在Cloud Firestore的单个集合中有1000个文档,是否可以获取随机文档?

比如说:学生是Firestore的一个系列,我在该系列中有1000名学生,我的要求是在每次通话时随机挑选10名学生.

解决方法:

是的,为了达到这个目的,请使用以下代码:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();CollectionReference studentsCollectionReference = rootRef.collection("students");studentsCollectionReference.get().addOnCompleteListener(new OnCompleteListener<querySnapshot>() {    @OverrIDe    public voID onComplete(@NonNull Task<querySnapshot> task) {        if (task.isSuccessful()) {            List<Students> studentList = new ArrayList<>();            for (documentSnapshot document : task.getResult()) {                Student student = document.toObject(Student.class);                studentList.add(student);            }            int studentCount = studentList.size();            int randomNumber = new Random().nextInt(studentCount);            List<Students> randomStudentList = new ArrayList<>();            for(int i = 1; i < 10; i++) {                randomStudentList.add(studentList.get(randomNumber));            }        } else {            Log.d(TAG, "Error getting documents: ", task.getException());        }    }});

这被称为经典解决方案,您可以将它用于仅包含少量记录的集合,但如果您害怕获得大量读取,我会建议您使用第二种方法.这还需要通过添加一个可以在数组中保存所有学生ID的新文档来对数据库进行一些更改.因此,要获得10名学生,您只需要进行一次单独的get()调用,这意味着只需要一次读取 *** 作,并获得包含学生ID的文档以及另外10次读取以获得实际的随机学生.

这种做法称为非规范化(复制数据),是Firebase的常见做法.如果您是Nosql数据库的新手,为了更好地理解,我建议您看一下这个视频,Denormalization is normal with the Firebase Database.它适用于Firebase实时数据库,但同样的原则适用于Cloud Firestore.

但是记住,就像你在这个新创建的节点中添加随机产品一样,你需要在不再需要的时候删除它们.

要将学生ID添加到数组,只需使用:

FIEldValue.arrayUnion("yourArrayProperty")

要删除学生ID,请使用:

FIEldValue.arrayRemove("yourArrayProperty")

要一次获得所有10名随机学生,您可以使用List< Task< documentSnapshot>>然后调用Tasks.whenAllSuccess(tasks),如我在这篇文章中的回答中所述:

> Android Firestore convert array of document references to List<Pojo>

总结

以上是内存溢出为你收集整理的java – 从Firestore中选择随机文档[复制]全部内容,希望文章能够帮你解决java – 从Firestore中选择随机文档[复制]所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1102757.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存