async def get(cls, **kwargs) -> Optional["MongoDBModel"]: db = get_db_client() result = await db.get(cls, **kwargs) if not result: return None result["id"] = result.pop("_id") return cls(**result)
async def list(cls, raw=True, _limit=0, _offset=0, **kwargs): db = get_db_client() cursor = db.list(cls, _limit=_limit, _offset=_offset, **kwargs) result = [] async for document in cursor: document["id"] = document.pop("_id") result.append(document) if not raw: return (cls(**record) for record in result) return result
async def save( self, include: set = None, exclude: set = None, rewrite_fields: dict = None, ) -> int: db = get_db_client() if not rewrite_fields: rewrite_fields = {} for field, value in rewrite_fields.items(): setattr(self, field, value) insert_result = await db.insert(self, include=include, exclude=exclude) self.id = insert_result.inserted_id return self.id
async def count(cls, **kwargs) -> int: db = get_db_client() result = await db.count(cls, **kwargs) return result
async def delete(cls, **kwargs) -> DeleteResult: db = get_db_client() result = await db.delete(cls, **kwargs) return result
async def create_indexes(cls) -> Optional[List[str]]: if hasattr(cls.Meta, "indexes"): db = get_db_client() collection = db.get_collection(cls.Meta.collection) return await collection.create_indexes(cls.Meta.indexes)
async def update_many(cls, filter_kwargs: dict, **kwargs) -> UpdateResult: db = get_db_client() result = await db.update_many(cls, filter_kwargs=filter_kwargs, **kwargs) return result