18
votes

Can someone explain this to me. I am working with node-firestore-backup-restore-master backup script for Firestore from github. Got it working but it only reads one document of the list of documents I have in a collection. The one it reads is in normal text the remaining are in italics and a message for the ones in italics says they don't exist and wont appear in queries.

They do exists and the associated documents and fields that appear when I query from my IOS app but not from the Node.js backup script.

Any thoughts?? Dave

3

3 Answers

16
votes

If you create documents with sub-documents and then delete the top level document from an SDK, the delete is not recursive. So while the top-level document is gone, its sub-documents remain.

The document IDs for these are shown as italicized ids in the UI: these documents do not actually exist, but we show them so that you can navigate to the sub collections.

Since there is no document anymore, the document itself will not show up in query results. If you need to find this document in query results, you'll want to create an empty document as a workaround.

8
votes

This happens in two cases:

  1. if you delete documents with subcollections

  2. if you create directly something like "/collection/document(1)/collection/document(2)" instead of creating it in two steps:

    • step 1. create: /collection/document(1)
    • step 2. create: /collection/document(1)/collection/document(2)

And look like if you are in any of these cases you can not list "document(1)" which is a quite strange way of working because they don't exist as "documents" (this is way they are marked in 'italic') but they "exist" as references to subcollections.

8
votes

In firestore, Documents shown in italics because of,

  1. delete collection or document with sub collection, sub documents.
  2. Adding collection and documents to an empty document.

The italics documents are not shown in your app, it can't fetched, only way to do this is directly specify the exact path and name of the document.

SOLUTION:

instead of adding only one collection to empty document, add one empty field in that document before adding collection.

In android I add an empty hash map to the field. but won't shown in database Here my example code:

Map<String ,Object> dummyMap= new HashMap<>();
DocumentReference df=db.collection("col1").document("doc1");
df.set(dummyMap);  // add empty field, wont shown in console
df.collection("your collection name");

The dummyMap and your collection are in same document "doc1".