Когда вы используете следующую ссылку коллекции:
colref := client.Collection("TimeEntries").Doc(week.Format("2006")).Collection(week.Format("2006-01"))
Это означает, что вы получаете из базы данных только документы в коллекции 2006-01
и только эти документы, не более того. К сожалению, в Firestore нет возможности также получить все документы в коллекции Events
, которая является вложенной коллекцией в документе 2006-01-02
в одном запросе. Запросы в Firestore мелкие: они получают только элементы из коллекции, с которой выполняется запрос. Невозможно получить документы из другой коллекции верхнего уровня и других коллекций или вложенных коллекций в одном запросе. Firestore не поддерживает запросы к различным коллекциям за один шаг. Один запрос может использовать только свойства документов в одной коллекции.
Если вы хотите запросить в базе данных Cloud Firestore документы в одной коллекции по documentId
, вы можете добиться этого, используя FieldPath.documentId()
, например:
client.collection.where(firebase.firestore.FieldPath.documentId(), '<', 'yourDate').get();
Но имейте в виду, что идентификаторы документов String и, следовательно, сюда будут входить документы с идентификатором, например 2018-10-15
или 2018-10-22
. Поэтому, когда вы заказываете строки, результат упорядочивается лексикографически, и я думаю, что это не то, что вы хотите. Поэтому, если вы хотите запросить коллекцию по числовым значениям, вам нужно записать идентификатор документа в виде числового значения.
Но наиболее эффективным решением в этом случае было бы упростить вашу базу данных, создав одну коллекцию, содержащую event
документов, и добавить под каждым объектом события свойство даты, чтобы вы могли запрашивать базу данных в соответствии с ней. В этом случае вы можете использовать все функции, которые предоставляет Firestore SDK, и фильтровать сравнение диапазонов (<, <=,>,> =).