Идентификаторы ваших документов в коллекции fitbit_sleep
- это строки даты (т. Е. Dec 9, 2019
). Таким образом, вам просто нужно передать эту строку в метод doc()
следующим образом:
let userRef1 = firebase.firestore().collection("users").doc(userId).collection("fitbit_sleep");
userRef1
.doc("Dec 9, 2019")
.get()
.then(snap => {
console.log(snap.data());
});
Обратите внимание, что пока ваши идентификаторы документов технически действительны (см. https://firebase.google.com/docs/firestore/quotas#collections_documents_and_fields) довольно классно использовать другой формат, если вы хотите использовать дату в качестве уникального идентификатора, как, например, следующий формат YYYYMMDD
. Таким образом, вы могли бы использовать 20191209
вместо Dec 9, 2019
.
Однако, сказав это, также стоит отметить, что не рекомендуется использовать монотонно увеличивающиеся идентификаторы документов такие как: 20191209
, 20191210
, 20191211
, потому что, как объясняется в do c ", такие последовательные идентификаторы могут привести к горячим точкам , которые влияют на задержку."
Итак, если вы планируете создавать эти fitbit_sleep
документы " с очень высокой скоростью " и назначать им монотонно увеличивающиеся идентификаторы, такие как 20191209
, 20191210
, 20191211
, это будет лучше принять другую стратегию.
Вы можете использовать идентификаторы документов, автоматически назначаемые Firestore, с помощью метода add()
и добавлять в сам новый документ поле со значением даты в формате YYYYMMDD
, Затем вы можете использовать запрос, чтобы найти данный документ, как показано ниже:
let userRef1 = firebase.firestore().collection("users").doc(userId).collection("fitbit_sleep");
userRef1
.where('date', '==', '20191209');
.get()
.then(querySnapshot => { // Note: this a QuerySnapshot not a DocumentSnapshot
console.log(querySnapshot.docs[0].data());
})
РЕДАКТИРОВАТЬ В СООТВЕТСТВИИ С РЕДАКТИРОВКОЙ ВАШЕГО ВОПРОСА
После редактирования Похоже, что вы хотите запросить самый последний документ в коллекции users/userId/fitbit_sleep
. Для этого вам необходимо заказать и ограничить документами, возвращенными по вашему запросу, как описано в do c.
Там это два случая:
Случай 1: Одно из полей меток времени в ваших документах (т. е. dateAdded
или endTime
) соответствует значению, которое вы хотите отсортировать (т. е. они соответствуют на дату, представленную идентификатором документа).
Затем можно заказать запрос на основе одного из этих полей и ограничить его последним документом следующим образом:
let userRef1 = firebase.firestore().collection("users").doc(userId).collection("fitbit_sleep");
userRef1
.orderBy('endTime', 'desc')
.limit(1)
.get()
.then(querySnapshot => { // Note: this a QuerySnapshot not a DocumentSnapshot
console.log(querySnapshot.docs[0].data());
})
Случай 2 Нельзя использовать одно из этих полей меток времени, поскольку они не соответствуют дате, представленной идентификатором документа. Затем вам нужно будет добавить дополнительное поле в ваш документ, например, со значением даты в формате ГГГГММДД (если есть только один документ в день), и отсортировать по этому полю. Поэтому, если вы вызовете это поле orderingDate
, вы бы изменили приведенный выше запрос следующим образом:
userRef1
.orderBy('orderingDate', 'desc')
.limit(1)
.get()
.then(querySnapshot => { // Note: this a QuerySnapshot not a DocumentSnapshot
console.log(querySnapshot.docs[0].data());
})