Мне нужна помощь для запроса длинной коллекции с диапазоном дат. См. Нижеприведенный пример документа. Я хочу запросить поле startTime, используя диапазон дат.
Мне нужна помощь для запроса длинной коллекции с диапазоном дат. См. Нижеприведенный пример документа. Я хочу запросить поле startTime, используя диапазон дат.
Поскольку у меня есть поле "dueDate", которое хранится как timestamp (и NOT как строка или номер) в облачном firestore, я сделал это, чтобы получить документы-фактуры с установленной датой в 2017 году:
let start = new Date('2017-01-01');
let end = new Date('2018-01-01');
this.afs.collection('invoices', ref => ref
.where('dueDate', '>', start)
.where('dueDate', '<', end)
);
ПРИМЕЧАНИЕ. Поле dueDate хранилось в firebase с объектом Date(). например: this.doc.dueDate = new Date('2017-12-25')
Вы можете сохранить объект datetime как Unix time (секунды с 1 января 1970 года). Тогда вы можете просто использовать, где выбрать, как это:
collectionRef.where("startTime", ">=", "1506816000").where("startTime", "<=", "1507593600")
Btw - конвертировать из datetime в Unix время в вашем приложении, вы можете использовать отличный момент библиотеки (если вы строите что-то с js или узлом).
Решением является использование Date.now(), прекращение использования службы timestamp из firebase, вам нужно работать с числовым значением времени в миллисекундах, например, например: 1514271367000, вместо этого, если firestore использует 26/12/2017 1:56: 07 GMT- 0500 (-05) не будет работать. Пример запроса:
this.fsService.afs.collection('chats/4bY1ZpOr1TPq8bFQ3bjS/finance/123+finance/12345'
, ref => ref.orderBy('hour').startAt(1514184967000).endAt(1514271367000))
.valueChanges().subscribe(data =>{
this.mensajes = data;
})
Для всех, кто недавно пользовался фирменным пожарным магазином. Существует различие в зависимости от ваших настроек имплантации. (Или в зависимости от версии Firebase)
Раньше firestore сохранял временную метку в качестве данных, однако, как описано здесь, в документах вскоре будет заменен объект Timestamp. Смотрите документацию Timestamp здесь.
Вы можете принудительно реализовать свою реализацию, добавив в свой код параметр, заставляющий firebase использовать объекты Timestamp вместо Date.
var firebaseApp = firebase.initializeApp({
apiKey: [APIKEY],
authDomain: [FIREBASEAPPDOMAIN],
projectId: [PROJECTID]
});
var firestore = firebase.firestore();
var settings = { timestampsInSnapshots: true }; // force Timestamp object instead of Date
firestore.settings(settings);
В веб-приложении именно таким образом можно использовать временные метки и даты Firebase для запросов и хранения документов.
var startfulldate = admin.firestore.Timestamp.fromDate(new Date(1556062581000));
db.collection('mycollection')
.where('start_time', '<=', startfulldate)
.get()
.then(snapshot => {
var jsonvalue: any[] = [];
snapshot.forEach(docs => {
jsonvalue.push(docs.data())
})
res.send(jsonvalue);
return;
}).catch( error => {
res.status(500).send(error)
});