mongo¶
MongoCollection (EntryCollection)
¶
Class for querying MongoDB collections (implemented by either pymongo or mongomock) containing serialized EntryResource
s objects.
__init__(self, name, resource_cls, resource_mapper, database='optimade')
special
¶
Initialize the MongoCollection for the given parameters.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
name | str | The name of the collection. | required |
resource_cls | EntryResource | The type of entry resource that is stored by the collection. | required |
resource_mapper | BaseResourceMapper | A resource mapper object that handles aliases and format changes between deserialization and response. | required |
database | str | The name of the underlying MongoDB database to connect to. | 'optimade' |
Source code in optimade/server/entry_collections/mongo.py
def __init__(
self,
name: str,
resource_cls: EntryResource,
resource_mapper: BaseResourceMapper,
database: str = CONFIG.mongo_database,
):
"""Initialize the MongoCollection for the given parameters.
Parameters:
name: The name of the collection.
resource_cls: The type of entry resource that is stored by the collection.
resource_mapper: A resource mapper object that handles aliases and
format changes between deserialization and response.
database: The name of the underlying MongoDB database to connect to.
"""
super().__init__(
resource_cls,
resource_mapper,
MongoTransformer(mapper=resource_mapper),
)
self.parser = LarkParser(version=(1, 0, 0), variant="default")
self.collection = CLIENT[database][name]
# check aliases do not clash with mongo operators
self._check_aliases(self.resource_mapper.all_aliases())
self._check_aliases(self.resource_mapper.all_length_aliases())
count(self, **kwargs)
¶
Returns the number of entries matching the query specified by the keyword arguments.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
kwargs | dict | Query parameters as keyword arguments. The keys 'filter', 'skip', 'limit', 'hint' and 'maxTimeMS' will be passed to the | {} |
Source code in optimade/server/entry_collections/mongo.py
def count(self, **kwargs) -> int:
"""Returns the number of entries matching the query specified
by the keyword arguments.
Parameters:
kwargs (dict): Query parameters as keyword arguments. The keys
'filter', 'skip', 'limit', 'hint' and 'maxTimeMS' will be passed
to the `pymongo.collection.Collection.count_documents` method.
"""
for k in list(kwargs.keys()):
if k not in ("filter", "skip", "limit", "hint", "maxTimeMS"):
del kwargs[k]
if "filter" not in kwargs: # "filter" is needed for count_documents()
kwargs["filter"] = {}
return self.collection.count_documents(**kwargs)
insert(self, data)
¶
Add the given entries to the underlying database.
Warning
No validation is performed on the incoming data.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
data | List[optimade.models.entries.EntryResource] | The entry resource objects to add to the database. | required |
Source code in optimade/server/entry_collections/mongo.py
def insert(self, data: List[EntryResource]) -> None:
"""Add the given entries to the underlying database.
Warning:
No validation is performed on the incoming data.
Arguments:
data: The entry resource objects to add to the database.
"""
self.collection.insert_many(data)