#javascript #firebase #google-cloud-firestore #react-native-firebase
# #javascript #firebase #google-облако-firestore #react-native-firebase
Вопрос:
Я хочу получить документы из коллекции после определенной даты и времени.
Пример:
если дата = 30/11/2020, 12:30 утра (в javascript)
- Запрос должен возвращать документы, созданные после указанной даты.
- Запрос не должен возвращать документы, созданные до указанной даты.
Вы можете увидеть мой текущий код:
await db
.collection(`users/${user}/messages`)
.orderBy("cDate", "desc") /* {cDate: firestore.Timestamp.fromDate(new Date())}*/
.limit(100)
.get();
Любая помощь
Комментарии:
1. Не совсем понятно, что вы пытаетесь здесь сделать, поскольку мы не можем видеть данные в ваших документах. Но вам нужно будет использовать предложение where для фильтрации документов в запросе в соответствии с вашими потребностями. Если вам нужна помощь в этом, вам следует отредактировать вопрос, чтобы более подробно объяснить фактическое содержимое ваших документов и то, что вы пытались сделать для их фильтрации, как вы видите в документации: firebase.google.com/docs/firestore/query-data /…
2. @DougStevenson, я думаю, это ясно, я просто хочу вернуть документы после определенной даты. пример: после 30/11/2020 12:00 утра. Поэтому мой запрос должен возвращать все документы, если они созданы после этой даты, и не должен возвращать эти документы после до этой даты
3. Есть ли у вас свойство date в ваших документах?
4. отредактированный вопрос, пожалуйста, взгляните на него еще раз
5. @AndresGardiol, да, у меня это есть, как вы можете видеть
cDate
Ответ №1:
Вы можете сделать что-то вроде этого:
const isoDateTime = '2020-11-30T12:30:00';
await db
.collection(`users/${user}/messages`)
.where('cDate', '>=', isoDate); //<--- Its important to have an ISO formatted date string
.orderBy("cDate", "desc")
.limit(100)
.get();
При этом вы должны получить все документы после isoDate
(включены).
Вы можете использовать >
, чтобы не указывать дату
Комментарии:
1. большое вам спасибо, и вот является
cDate
ли firestore датой, будет ли это работать?2. В ваших документах firestore у вас должна быть строка даты времени ISO в ваших
cDate
свойствах3. спасибо, я вернусь обратно после проверки вашего ответа, если он сработает, то будет принят
4. Вы можете увидеть более подробную информацию о
where
методе здесь firebase.google.com/docs/firestore/query-data /…5. Не могли бы вы сообщить мне, почему важна дата ISO?
Ответ №2:
Если вы пытаетесь отфильтровать документы на основе поля типа метки времени, вы можете просто предоставить объект даты JavaScript в качестве фильтра для этого поля.
.where("cDate", ">", aJavaScriptDateObject)
Вы также можете использовать объект метки времени Firestore.
Комментарии:
1. будет ли он поддерживаться каким — либо объектом date ?
2. пример: новые данные().toISOString()
3. Нет, это строка, а не объект date.
4. Возможно ли это сохранить в firestore как {CDate: new Date()}. если да, будет ли все еще
orderBy
работать?5. Это также сохраняет временную метку, которую можно заказать с другими временными метками.