This page describes the storage size of documents, fields, and index entries in Cloud Firestore .
You can learn about the costs of this storage at the Pricing page.
String size
String sizes are calculated as the number of UTF-8 encoded bytes + 1.
The following are stored as strings:
- Collection name
- Field names
- String field values (including
_id)
For example:
- The collection name
tasksuses 5 bytes + 1 byte, for a total of 6 bytes. - The field name
descriptionuses 11 bytes + 1 byte, for a total of 12 bytes.
Field value size
The following table shows the size of field values by type.
| Type | Size |
|---|---|
| Array | The sum of the sizes of its values |
| Boolean | 1 byte |
| Binary data | Byte length + 1 for a non-generic (non-0) subtype |
| Date | 8 bytes |
| Double | 8 bytes |
| Double128 | 16 bytes |
| 32-bit integer | 4 bytes |
| 64-bit integer (long) | 8 bytes |
| Object | The sum of the string sizes of each field name and the sizes of each field falue in the embedded object |
| Min Key | 1 byte |
| Max Key | 1 byte |
| Null | 1 byte |
| Regular expression | (Pattern length + 1) + (Options length + 1) |
| Timestamp | 8 bytes |
| String | Number of UTF-8 encoded bytes + 1 |
For example, a boolean field named done
would use 6 bytes:
- 5 bytes for the
donefield name - 1 byte for the boolean value
Document size
The size of a document is the sum of:
- The string size of the collection name
- The sum of the string size
of each field name (except
_id) - The sum of the size of each field value
(including
_id) - 48 additional bytes
This example is for a document in collection tasks
:
{
"_id"
:
"my_task_id"
,
"type"
:
"Personal"
,
"done"
:
false
,
"priority"
:
1
,
"description"
:
"Learn Cloud Firestore"
}
The total size of the fields is 78 bytes:
| Field name and value | Field size in bytes |
|---|---|
"_id": "my_task_id"
|
11 for the field's string value |
"type": "Personal"
|
14 5 for the field name + 9 for the field's string value |
"done": false
|
6 5 for the field name + 1 for the field's boolean value |
"priority": 1
|
17 9 for the field name + 4 for the field's 32-bit integer value |
"description": "Learn Cloud Firestore"
|
34 12 for the field name + 22 for the field's string value |
So the document size is 6 + 78 + 48 = 132 bytes:
- 6 for the collection name
- 78 bytes for the fields
- 48 additional bytes
Index entry size
The size of an index entry in an index is the sum of:
- The string size of the collection name
- The size of the
_idfield value - The sum of the indexed field values
- 48 additional bytes
Consider a document in the tasks
collection:
{
"_id"
:
"my_task_id"
,
"type"
:
"Personal"
,
"done"
:
false
,
"priority"
:
1
,
"description"
:
"Learn Cloud Firestore"
}
For an index on the done
and priority
fields (both ascending), the total size of the index entry in this
index is 70 bytes:
- 6 bytes for the collection name
tasks - 11 bytes for the
_idfield value - 1 byte for the boolean field value
- 4 bytes for the 32-bit integer field value
- 48 additional bytes
For sparse indexes, if a document doesn't include any of the fields,
then no index entry is created. If a document contains at least one of the
indexed fields, an index entry is created with absent indexed fields
set to NULL
.
What's next
Learn about pricing .

