Using Documents
Documents contain JSON serializable data.
Referring to documents
In order to access a document, use the document method of collection.
Calling the document method does not actually create a document, but rather
creates a reference to that document.
No remote state of a document is actually accessed before methods are called on the document object.
collection = numerous.collection("my-collection")
document = collection.document("my-document")Loading document data
In order to load the data in a document, use the getcommand. This command returns any data stored
in the document, or None if the document does not exist.
collection = numerous.collection("my-collection")
document = collection.document("my-document")
data = document.get()
 
if data is None:
    print("this document has not been set yet")Setting document content
In order to save data, you must set the document's content. This will override
any existing data in that document. If you wish to modify the data, load it with
get first, modify the loaded data, and set it again.
collection = numerous.collection("my-collection")
document = collection.document("my-document")
document.set({"field1": "my field 1 value", "field2": 2})Serializing and deserializing custom types
The Numerous SDK serializes the data used to set the document contents with the
built-in json.dumps, which is limited in terms of what it can serialize. For
example, datetime.datetime is not serializable.
Currently, it is up to the application developer to handle this serialization manually.
In the example below, we manually serialize and deserialize MyData and
datetime.datetime objects.
@dataclass
class MyData:
    field1: str
    field2: int
 
 
my_datetime = datetime.now()
my_data = MyData(field1="my field 1 value", field2=2)
 
collection = numerous.collection("my-collection")
document = collection.document("my-document")
document.set({
    "my-data": asdict(my_data),
    "my-datetime": my_datetime.isoformat(),
})
 
data = collection.document("my-document").get()
my_deserialized_datetime = datetime.fromisoformat(data["my-datetime"])
my_deserialized_data = MyData(**datª["my-data"])