gpt4 book ai didi

java - 从 Firestore 中选择随机文档

转载 作者:太空宇宙 更新时间:2023-11-03 10:59:18 25 4
gpt4 key购买 nike

我在 Cloud Firestore 的一个集合中有 1000 个文档,是否可以随机获取文档?

例如:Students 是 Firestore 中的一个集合,我在该集合中有 1000 名学生,我的要求是每次调用时随机选择 10 名学生。

最佳答案

根据 Alex's answer我得到了从 Firebase Firestore 数据库中获取重复记录的提示(特别是对于少量数据)

我在他的问题中遇到了一些问题如下:

  • 它给出了所有相同的记录,因为 randomNumber 没有更新。
  • 即使我们每次都更新randomNumber,最终列表中也可能有重复的记录。
  • 它可能有我们已经显示的重复记录。

我已将答案更新如下:

    FirebaseFirestore database = FirebaseFirestore.getInstance();
CollectionReference collection = database.collection(VIDEO_PATH);
collection.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
List<VideoModel> videoModelList = new ArrayList<>();
for (DocumentSnapshot document : Objects.requireNonNull(task.getResult())) {
VideoModel student = document.toObject(VideoModel.class);
videoModelList.add(student);
}

/* Get Size of Total Items */
int size = videoModelList.size();
/* Random Array List */
ArrayList<VideoModel> randomVideoModels = new ArrayList<>();
/* for-loop: It will loop all the data if you want
* RANDOM + UNIQUE data.
* */
for (int i = 0; i < size; i++) {
// Getting random number (inside loop just because every time we'll generate new number)
int randomNumber = new Random().nextInt(size);

VideoModel model = videoModelList.get(randomNumber);

// Check with current items whether its same or not
// It will helpful when you want to show related items excepting current item
if (!model.getTitle().equals(mTitle)) {
// Check whether current list is contains same item.
// May random number get similar again then its happens
if (!randomVideoModels.contains(model))
randomVideoModels.add(model);

// How many random items you want
// I want 6 items so It will break loop if size will be 6.
if (randomVideoModels.size() == 6) break;
}
}

// Bind adapter
if (randomVideoModels.size() > 0) {
adapter = new RelatedVideoAdapter(VideoPlayerActivity.this, randomVideoModels, VideoPlayerActivity.this);
binding.recyclerView.setAdapter(adapter);
}
} else {
Log.d("TAG", "Error getting documents: ", task.getException());
}
}
});

希望这个逻辑对所有拥有少量数据的人有所帮助,我认为它不会对 1000 到 5000 条数据造成任何问题。

谢谢。

关于java - 从 Firestore 中选择随机文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48377381/

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