как получить документы после определенной даты и времени?

#javascript #firebase #google-cloud-firestore #react-native-firebase

# #javascript #firebase #google-облако-firestore #react-native-firebase

Вопрос:

Я хочу получить документы из коллекции после определенной даты и времени.

Пример:

если дата = 30/11/2020, 12:30 утра (в javascript)

  1. Запрос должен возвращать документы, созданные после указанной даты.
  2. Запрос не должен возвращать документы, созданные до указанной даты.

Вы можете увидеть мой текущий код:

 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. Это также сохраняет временную метку, которую можно заказать с другими временными метками.