'Firestore Query Default Order

The following is stated in the official documentation:

By default, a query retrieves all documents that satisfy the query in ascending order by document ID. You can specify the sort order for your data using orderBy(), and you can limit the number of documents retrieved using the limit().

But I found the above statement false. I have stored the document ids as increment numbers 1,2,3...

But when I fetched the document IDs by the following code.

firebaseFirestore.collection(documentPathOnFireStore).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                for(DocumentSnapshot documentSnapshot : task.getResult().getDocuments()){
                    documentsIds += documentSnapshot.getId() + ","
                }
         }});

I received the following results

1, 10, 100, 101, 102....

Is there really any way to get the result in ascending order of document Ids?



Solution 1:[1]

I received the following results:

1, 10, 100, 101, 102

That's the expected behavior since most likely you're storing those values as strings and not as numbers. Bear in mind that when ordering strings, the order is lexicographical. For example, 10 is placed before 2. See an example below:

1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, 21, 3

Is there really any way to get the result in ascending order of document Ids?

Yes, the single option that you have is to change the type of the field to be number and not string. Or, check my answer from the following post:

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Alex Mamo