#firebase #flutter #google-cloud-firestore
#firebase #трепетать #google-облако-firestore #flutter
Вопрос:
Мне нужно получить значения внутри моего документа Firestore, в котором есть вложенная коллекция.
ДОБАВЛЕНИЕ ДАННЫХ В БАЗУ ДАННЫХ
Добавляя, что я пытаюсь выполнить в userPolls
коллекции, мне нужно добавить документ с Id
на основе userId
, затем создать коллекцию «Ежедневных рассылок», в которой есть документ с Id
текущей датой, но без ‘/’, и в нем я помещаю все свои данные следующим образом:
final CollectionReference userPollCollection =
Firestore.instance.collection('userPolls');
Future setPoll(UserPoll userPoll) async {
var dt = userPoll.pollDate.replaceAll('/', '');
return await userPollCollection
.document(userId)
.collection('daillyPolls')
.document(dt)
.setData({
'uid': userId,
'pollDate': userPoll.pollDate,
'status': userPoll.status,
'statusCode': userPoll.statusCode
});
}
ЗАПРОС ДАННЫХ Из БАЗЫ ДАННЫХ
При извлечении данных мне нужно перейти к userPolls
, затем получить документ с Id
который является userId
, затем перейти к коллекции dailyPolls
, затем получить документ с Id
, который основан на текущей дате без ‘/’, затем получить данные, которые находятся внутри него.
Future getPoll() async {
final DateTime now = DateTime.now();
final DateFormat formatter = DateFormat('yyyy/MM/dd');
final String formatted = formatter.format(now);
var pollDate = formatted;
var dt = pollDate.replaceAll('/', '');
var docRef = userPollCollection
.document(userId)
.collection('dailyPolls')
.document(dt);
docRef.get().then((onValue) {
print(onValue.data);
});
}
Красный квадрат — это путь, а синий — это то, что мне нужно.
Я очень новичок в плоских базах данных.
Комментарии:
1. Я попробовал этот код с .documents, и он не работает со мной.. должно быть .doc
Ответ №1:
Я не уверен, какие классы вы пытаетесь использовать, но вот самый простой способ получить дату в правильном формате:
final DateTime now = DateTime.now();
final DateFormat formatter = DateFormat('yyyy/MM/dd');
final String formatted = formatter.format(now);
print(formatted);
var docRef = userPollCollection
.document(userId)
.collection('dailyPolls')
.document(formatted);
Чтобы затем получить поле состояния, вы должны сделать:
docRef.get().then((onValue) {
print(onValue.data().status);
});
Если у вас все еще возникают проблемы, проверьте вывод первого print
оператора, чтобы увидеть, соответствует ли его значение тому, что вы видите в базе данных.
Комментарии:
1. Извините, если я не был ясен, сэр. Что я пытаюсь получить, сэр, так это данные документа
20200826
. Мне нужно свойство ‘status’, чтобы я мог сравнить его с чем-то.2. Я обновил свой ответ, чтобы показать, как получить это конкретное поле. Также смотрите firebase.google.com/docs/firestore/query-data /…
3. Спасибо, сэр. Я изменил способ сохранения своих данных, чтобы мне было легче получить результат. Но ваше предложение помогло мне.