Raul
Raul

Reputation: 3091

Firestore orderBy Timestamp object

I am trying to order a query by timestamp.

In my document I have a field called "date" which has this form:

date = {
   nanoseconds: 963000000,
   seconds: 1594917688
}

In my code I have this:

let photosArray = [];

firebase
  .getDatabase()
  .collection("photos")
  .doc(firebase.getCurrentUser().uid)
  .collection("userPhotos")
  .orderBy("date", "asc") // Sorted by date in ascending direction
  .onSnapshot((snapshot) => {
      let changes = snapshot.docChanges();
      changes.forEach((change) => {
         if (change.type === "added") {
            // Get the new photo
            const photo = change.doc.data();

            // Add the photo to the photos list
            photosArray.push(photo);
          }
       });

       // The last photo is at the top of the list
       setPhotos(photosArray);

But when I render the list of photos, they are unsorted... For example: the first one taken 2 hours ago, the second one taken 1 minute ago, and the last one taken 2 years ago.

UPDATE

This is how I store the date in firestore

Firebase.js:

getTimestamp = () => firebase.firestore.FieldValue.serverTimestamp();

PhotoUploader.js

 await firestore
    .collection("photos")
    .doc(userId)
    .collection("userPhotos")
    .add({
        id,
        date: firebase.getTimestamp(),
     });

Upvotes: 3

Views: 3216

Answers (1)

Doug Stevenson
Doug Stevenson

Reputation: 317968

If your date field shows a map with two nested fields, that is not really a timestamp, and it won't sort the way you expect. You should take a look at the code that adds the date field to the document, and make sure it uses a timestamp correctly. Either that, or use a single timestamp numeric value that will sort the way you expect.

Upvotes: 0

Related Questions