Website-Suche

javascript - Firestore-Abfrage nach Datumsbereich


Ich brauche Hilfe, um eine lange Sammlung mit einem Datumsbereich abzufragen. Siehe das untenstehende Beispiel-Dokument. Ich möchte das Feld startTime mithilfe eines Datumsbereichs abfragen.

Antwort #1

Da ich das Feld dueDate als „Timestamp“ (und NICHT als String oder Number) in Cloud Firestore gespeichert habe, habe ich dies getan, um die Rechnungsdokumente mit einem Fälligkeitsdatum im Jahr 2017 zu erhalten:

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)
);

HINWEIS: Das Feld dueDate wurde in Firebase mit einem Date()-Objekt gespeichert. z.B.: this.doc.dueDate=new Date('2017-12-25')

Antwort #2

Sie könnten das Datetime-Objekt als Unix-Zeit (Sekunden seit dem 1. Januar 1970) speichern. Dann können Sie einfach die Where-Auswahl wie folgt verwenden:

collectionRef.where("startTime", ">=", "1506816000").where("startTime", "<=", "1507593600")

Übrigens - um in Ihrer App von datetime in Unix-Zeit umzuwandeln, können Sie die ausgezeichnete (jetzt veraltete) Bibliothek moment verwenden (wenn Sie etwas mit js oder node bauen).

Antwort #3

Sie können Abfragen mit der spezifischen Firestore-Timestamp-Klasse durchführen.

Siehe das folgende Beispiel:

    const startfulldate = admin.firestore.Timestamp.fromDate(
       new Date(1556062581000)
    );

    const snapshot = await db.collection('mycollection')
      .where('start_time', '<=', startfulldate)
      .get();

Antwort #4

const event = new Date();
const expirationDate = admin.firestore.Timestamp.fromDate(event);
const query = collectionRef.where('startTime', '<=', expirationDate)

Antwort #5

Da startTime als Timestamp gespeichert ist, können Sie diesen Abfragebereich für genauere Ergebnisse verwenden (dies ist sowohl für Bedingungen mit langem Datumsbereich als auch für denselben Datumsbereich gut).

const start = new Date('2021-01-01T00:00:00.000z');
const end = new Date('2021-03-01T23:59:59.000z');

db.collection('Data').where('startTime', '>=', start).where('startTime', '<=', end).get().then(data => {
   //pass your 'data' here
});

Ich habe dies in meinen Node.js-Apps verwendet. Hoffentlich ist das nützlich.

Verwandte Artikel