gpt4 book ai didi

firebase - Flutter Firestore 检索随机 Firestore 文档

转载 作者:行者123 更新时间:2023-12-04 12:33:13 24 4
gpt4 key购买 nike

我希望有人可以帮助我完成以下实现:我只是想从 firestore 中检索一个随机文档。
按照这个使用 自动 ID 版本 的流行指南,我使用自动生成的文档 ID 并将它们保存为字段 id
Firestore: How to get random documents in a collection
[..]自动识别版本
如果您使用我们的客户端库中提供的随机生成的自动 ID,您可以使用相同的系统随机选择一个文档。在这种情况下,随机排序的索引是文档 ID。[...]
为查询获取随机 id 似乎很明显,但对于我这个新手来说,我不确定从哪里随机获取自动 id 值以及如何在不运行查询的情况下适应我的 _randomIndex。我现在必须如何定义我的 _randomIndex

QuerySnapshot querySnapshot = await ref
.where('id', isGreaterThanOrEqualTo: _randomIndex)
.orderBy('id', descending: true)
.limit(1)
.get();
解决方案
谢谢大家!我认为对于更多人来说,如何通过查看上述指南并使用 flutter 来实现给定的方法并不是一件容易的事。
例如,我在 Flutter 上下文中听说 uuids 和随机 id,总是将我提到流行的库,例如 https://pub.dev/packages/uuid/examplehttps://pub.dev/packages/flutter_guid/install
就我而言,它们不起作用,多亏了@Jigar Patel,我们现在可以完美地随机化它。在以下示例中,我们还可以确定文档数量:
import 'dart:math';

String getRandomGeneratedId() {
const int AUTO_ID_LENGTH = 20;
const String AUTO_ID_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';

const int maxRandom = AUTO_ID_ALPHABET.length;
final Random randomGen = Random();

String id = '';
for (int i = 0; i < AUTO_ID_LENGTH; i++) {
id = id + AUTO_ID_ALPHABET[randomGen.nextInt(maxRandom)];
}

Future<List<Model>> getData() async {
List<Model> dataList = [];
CollectionReference myRef = _db.collection('data');
final data = ['data','data']; // demo purposes only


// Retrieves 2 random data in a loop
for (int i = 0; i < 2; i++) {

// generate a random index based on the list length
// and use it to retrieve the element

String _randomIndex = getRandomGeneratedId();

QuerySnapshot querySnapshot = await myRef
.where('data', arrayContainsAny: data)
.where('id', isGreaterThanOrEqualTo: _randomIndex)
.orderBy('id', descending: false)
.limit(1)
.get();

dataList.addAll(_dataListFromSnapshot(querySnapshot));
}
return dataList;
}

最佳答案

在 Auto-Id 版本的情况下,您需要在 firebase 为新文档创建 id 的同一个 way 中创建一个随机 id(用于 _randomIndex ),就像这样。

import 'dart:math';

String getRandomGeneratedId() {
const int AUTO_ID_LENGTH = 20;
const String AUTO_ID_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';

const int maxRandom = AUTO_ID_ALPHABET.length;
final Random randomGen = Random();

final StringBuffer buffer = StringBuffer();
for (int i = 0; i < AUTO_ID_LENGTH; i++) {
buffer.write(AUTO_ID_ALPHABET[randomGen.nextInt(maxRandom)]);
}

return buffer.toString();
}

关于firebase - Flutter Firestore 检索随机 Firestore 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66966147/

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