Saltar a contenido

mongo_model

app.contrib.mongoDB.mongo_model

Un Módulo de Python que expone una clase base, para generar una instancia con metodos sencillos y gestionar a MongoDB, usando pymongo.

Para más información, te recomendamos leer la documentación del Proyecto.

MongoModel

Genera una instancia con metodos sencillos para el manejo de MongoDB usando MongoClient de pymongo.

Attributes:

Name Type Description
_db Any

donde almacena el objeto de conexión.

_prefix str

El prefijo para las colecciones.

Raises:

Type Description
TypeCheckError

error de comprobación de tipos

maximum recursion depth exceeded

en caso de que no se pueda definir el valor de retorno de la propiedad __tablename__

Examples:

# se define una clase que extiende de MongoModel
class Locales(MongoModel):
    __tablename__: str = "Locales"
    name: str
    code: str
    status: str
    update_at: Optional[str]
    created_at: Optional[str]

# se crea una instancia de la clase
new_locale = Locales(request.app.mongo_db)

# se asignan los valores
new_locale.name = body.name
new_locale.code = body.code
new_locale.status = DefaultStatus.Active

# se guardan los datos en la Base de Datos
# utilizando el método `save`
result = await new_locale.save()

__tablename__: str property

Extrae el nombre de la colección, definido en el campo __tablename__, de la clase que se extiende de MongoModel.

Raises:

Type Description
TypeCheckError

error de tipos emitido por typeguard

maximum recursion depth exceeded

error de recursion en caso de que no se pueda definir el valor de retorno de la propiedad __tablename__

Returns:

Type Description
str

el nombre de la colección, ó None en caso de error.

Examples:

1
2
3
class MyClass(MongoModel):
    __tablename__: str = "MyAwesomeCollection"
    ...

__init__(conn=None)

Constructor de la clase MongoModel.

Parameters:

Name Type Description Default
conn Request

una instancia de Request.app con el objeto de conexión a la Base de Datos

None

Raises:

Type Description
RuntimeError

en caso de que no se pueda generar una conexión a la Base de Datos

Exception

cualquier otra Excepción al momento de crear la conexión

get_timestamp()

Genera un objeto de tipo bson.timestamp.

Returns:

Type Description
Optional[Timestamp]

un objeto de tipo bson.timestamp ó None en caso de error

Examples:

self.get_timestamp()

mongo_id(key=None)

Genera un objeto de tipo bson.objectid, en modo legacy para compatibilidad con mongoDB.

Parameters:

Name Type Description Default
key str

un campo de tipo string, por defecto None.

None

Returns:

Type Description
ObjectId

un objeto de tipo bson.objectid, ó None en caso de error

Examples:

self.mongo_id()

generate_id()

Genera un UUID basado en uuid.uuid4() en vez de bson.objectid, para utilizar ObjectId utilice el método mongo_id.

Returns:

Type Description
Any

un uuid.uuid4() ó None en caso de error

Examples:

self.generate_id()

get_prefix()

Obtiene un objeto de tipo Collection de MongoDB, adicionalmente valida si se definió un prefijo para la Base de Datos, en cuyo caso se le agrega al nombre de la colección.

Notes
  • Puede generar raises de tipo typeguard.TypeCheckError ó maximum recursion depth exceeded en caso de que no se pueda definir el valor de retorno de la propiedad __tablename__.

Returns:

Type Description
Collection

un objeto de tipo Collection, ó None en caso de error

Examples:

self.get_prefix()

custom_encoder(obj)

Método utilizado por orjson para validar algunos tipos de datos, mientras se decodifica los resultados de la consulta a la Base de Datos.

Parameters:

Name Type Description Default
obj Any

un objeto Para serializar una subclase o tipos arbitrarios

required
Notes
  • Esta es una función recursiva.

Para más información, consulta:

Returns:

Type Description
Any

un tipo soportado por orjson ó None en caso de error

Examples:

...
orjson.dumps(data, default=self.custom_encoder)

build_response(data)

Convierte los resultados obtenidos de MongoDB en un diccionario, ó lista de diccionarios utilizando bson y orjson para la conversión de tipos.

Adicionalmente busca y elimina los objetos vacíos dentro de la lista de resultados.

Parameters:

Name Type Description Default
data Any

la data a convertir

required

Returns:

Type Description
Any

usualmente un diccionario, lista de diccionarios ó None en caso de error

Examples:

...
self.build_response(result_query)

get_all(select_fields=None, limit=0, filters=None) async

Obtiene todos los documentos de una colección, adicionalmente permite una lista de campos a devolver y un limite para la cantidad de documentos consultados.

Parameters:

Name Type Description Default
select_fields list[str]

una lista con los posibles campos de los registros a retornar. por defecto None.

None
limit int

define el limite de registros a consultar. por defecto 0.

0
filters dict[str, Any]

un diccionario con valores, para realizar un filtro.

None

Returns:

Type Description
Any

usualmente una lista de diccionarios con el resultado de la consulta, ó None en caso de error

Examples:

# ejemplo 1
...
await self.get_all()

# ejemplo 2
...
my_fields: list[str] = ["field1", "field2", "field3"]

await self.get_all(my_fields)

# ejemplo 3
...
await self.get_all(my_fields, 100)

# ejemplo 4
...
some_filters: dict[str, Any] = {
    "company_id": company_id,
    "status": DefaultStatus.Active
}

await self.get_all(my_fields, 100, some_filters)

as_dict()

Convierte la instancia de clase, en un diccionario y elimina algunos campos no necesarios.

Returns:

Type Description
dict

un diccionario con la lista de claves/valor de la colección

Examples:

self.as_dict()

save() async

Guarda un objeto (de tipo MongoModel) ó un diccionario en la Base de Datos, adicionalmente agrega el campo created_at en caso de no estar presente.

Raises:

Type Description
PyMongoError

excepciones generadas por PyMongo.

Returns:

Type Description
Any

el id del documento almacenado, ó None en caso de error

Examples:

1
2
3
4
5
6
7
8
...
new_doc = awesome_coll(request.app.mongo_db)

new_doc.name = "document one"
new_doc.status = DefaultStatus.Active

...
result = await new_doc.save()

multi_save(data) async

Guarda múltiples objetos/diccionarios en la Base de datos, adicionalmente agrega los campos _id y created_at a cada objeto/diccionario de la lista.

Para información sobre los limites, consulte el módulo app.config.db.mongo

Parameters:

Name Type Description Default
data list[dict[str, Any] | object]

una lista que contiene múltiples objetos/diccionarios para almacenar

required

Raises:

Type Description
PyMongoError

excepciones generadas por PyMongo.

Returns:

Type Description
Optional[list[Any]]

una lista con los id de los documentos almacenados ó None en caso de error

Examples:

...
subject_list = list[dict[str, Any]] = [
    {
        "name": "John"
        "lastname": "Doe"
    },
    {
        "name": "Jane"
        "lastname": "Doe"
    }
]

many_docs = awesome_coll(request.app.mongo_db)
...
result = await many_docs.multi_save(subject_list)

raw_multi_save(table_name, data) async

Guarda múltiples diccionarios en la Base de datos.

Para información sobre los limites, consulte el módulo app.config.db.mongo

Parameters:

Name Type Description Default
table_name str

el nombre de la colección(tabla)

required
data list[dict[str, Any] | object]

una lista que contiene múltiples objetos/diccionarios para almacenar

required
Warning
  • Este método genera los _id de cada documento utilizando ObjectId() de MongoDB, si no se quiere esto, envíe el campo _id en cada documento.

  • Recomendamos usar la función generate_id para crear el campo _id.

  • Este método NO realiza validaciones más allá de los limites de BATCH_LIMIT y tipos de datos enviados por los parámetros, se recomienda validar todos los datos antes de guardar.

Raises:

Type Description
PyMongoError

excepciones generadas por PyMongo.

Returns:

Type Description
Optional[list[Any]]

una lista con los id de los documentos almacenados ó None en caso de error

Examples:

...
subject_list = list[dict[str, Any]] = [
    {
        "_id": "2Yl8TV7kqJddo7WWl3RwinV5H0tMGEks"
        "name": "John"
        "lastname": "Doe"
        "age": 25
    },
    {
        "_id": "qbEQh2w9rXMB6FQ6rRDAS451S0Xtymab"
        "name": "Jane"
        "lastname": "Doe"
        "age": 24
    }
]

many_docs = awesome_coll(request.app.mongo_db)
...

result = await many_docs.raw_multi_save("awesome_coll_name", subject_list)

save_and_set(key, data) async

Guarda un objeto (de tipo MongoModel) ó un diccionario en la Base de Datos, con un ID definido por el usuario. Adicionalmente agrega el campo created_at en caso de no estar presente.

Parameters:

Name Type Description Default
key str

un campo de tipo string para convertirlo en el id único del registro, recomendamos usar la función generate_id

required
data (object, dict[str, Any])

un objeto (de tipo MongoModel) ó un diccionario.

required
Warning

este metódo esta en revisión, puede cambiar en el futuro.

Raises:

Type Description
PyMongoError

excepciones generadas por PyMongo.

Returns:

Type Description
Any

el id del documento almacenado, ó None en caso de error

Examples:

...
new_doc = awesome_coll(request.app.mongo_db)

new_id:str = new_doc.generate_id()

data: dict[str, Any] = {
    "name": "John"
    "lastname": "Doe",
    "status": DefaultStatus.Active
}

...
result = await new_doc.save_and_set(new_id, data)

get_by_id(key, select_fields=None, filters=None) async

Obtiene un registro de la Base de Datos por su ID, opcionalmente permite definir una lista de campos a devolver y filtros sobre el documento.

Parameters:

Name Type Description Default
key str

el id único del registro a consultar

required
select_fields list[str]

una lista de campos a devolver, por defecto None.

None
filters dict[str, Any]

un diccionario con valores, para realizar filtros sobre el documento, por defecto None.

None
Notes
  • Esta consulta realiza el filtro inicial sobre el campo id del registro (key), y luego aplica el resto de validaciones, con el campo de filtro (filters).
  • Es posible que el registro consultado exista con el id proporcionado (key) pero al aplicar el campo filters el resultado sea nulo, en cuyo caso se deberá revisar los filtros enviados a la consulta.

Raises:

Type Description
PyMongoError

excepciones generadas por PyMongo.

Returns:

Type Description
Any

un diccionario con el documento consultado, ó None en caso de error

Examples:

...
user_doc = awesome_coll(request.app.mongo_db)

# ejemplo 1
result = await user_doc.get_by_id(user_id)

# ejemplo 2
result = await user_doc.get_by_id(user_id, ["name"])

# ejemplo 3
result = await user_doc.get_by_id(user_id, ["name"], {"status": DefaultStatus.Active})

get_by(filters, select_fields=None, limit=0) async

Obtiene registros de la Base de Datos definidos por el campo de filtros (filters), opcionalmente permite definir una lista de campos a devolver y un limite de registros.

Parameters:

Name Type Description Default
filters dict[str, Any]

un diccionario (campos clave/valor), para realizar el filtro

required
select_fields list[str]

una lista con los posibles campos de los registros a retornar. por defecto None

None
limit int

define el limite de registros a consultar. por defecto 0

0
Notes
  • Es posible especificar filtros un poco más avanzados como $or, $eq, $in etc.

Para más información:

Raises:

Type Description
PyMongoError

excepciones generadas por PyMongo.

Returns:

Type Description
Any

usualmente una lista de diccionarios con el resultado de la consulta, ó None en caso de error

Examples:

...
user_list = awesome_coll(request.app.mongo_db)

# ejemplo 1
result = await user_list.get_by({"lastname": "Doe"})

# ejemplo 2
result = await user_list.get_by({"lastname": "Doe"}, ["name", "lastname"])

# ejemplo 3
result = await user_list.get_by({"lastname": "Doe"}, ["name", "lastname"], 100)

update(key, data) async

Actualiza un registro de la Base de Datos.

Parameters:

Name Type Description Default
key str

el id único del registro a actualizar

required
data (object, dict[str, Any])

un objeto (de tipo MongoModel) ó un diccionario. con los campos/valores a actualizar

required
Warning

este metódo esta en revisión, puede cambiar en el futuro.

Returns:

Type Description
Any

un objeto de tipo UpdateResult si el registro fue actualizado con exito, ó None en caso de error

Raises:

Type Description
PyMongoError

excepciones generadas por PyMongo.

Examples:

1
2
3
4
5
6
7
8
...
users = awesome_coll(request.app.mongo_db)
user_to_find = await users.get_by_id(user_id)

user_to_find["status"] = DefaultStatus.Inactive

...
result = await users.update(user_id, user_to_find)

remove(key, filters=None, mode=None) async

Elimina un registro de la Base de Datos.

Parameters:

Name Type Description Default
key str

el id único del registro a eliminar/actualizar (según el modo)

required
filters dict[str, Any]

un diccionario con valores para realizar filtros al momento de eliminar

None
mode DeleteMode

determina si el registro será eliminado de la Base de Datos ó actualizado, por defecto Soft (actualizado).

None
Warning

este metódo esta en revisión, puede cambiar en el futuro.

Notes
  • El campo mode determina si el registro será eliminado de la Base de Datos ó actualizado.

  • Los modos admitidos se establecen en la Clase DeleteMode en el módulo app.common.enums

    • Soft: en el registro, se fija el estado DefaultStatus.Deleted en el campo status.
    • Hard: el registro es eliminado de la Base de Datos.
  • Esta consulta realiza el filtro inicial sobre el campo id del registro (key), y luego aplica el resto de validaciones, con el campo de filtro (filters).

  • Es posible que el registro consultado exista con el id proporcionado (key) pero al aplicar el campo filters el resultado sea nulo, en cuyo caso se deberá revisar los filtros enviados a la consulta.

Raises:

Type Description
PyMongoError

excepciones generadas por PyMongo.

Returns:

Type Description
Any

Nulo si el registro fue eliminado/actualizado con exito, de lo contrario un mensaje de error

Examples:

...
users = awesome_coll(request.app.mongo_db)

# ejemplo 1
result = await users.remove(user_id)

# ejemplo 2
filters: dict[str, Any] = {"lastname": "Doe"}

result = await users.remove(id, filters)

# ejemplo 3
result = await users.remove(id, filters, DeleteMode.Soft)

# ejemplo 4
result = await users.remove(id, filters, DeleteMode.Hard)

remove_multi(filters, mode=None) async

Elimina múltiples registros de la Base de datos.

Parameters:

Name Type Description Default
filters object | dict[str, Any]

un diccionario con valores para realizar filtros al momento de eliminar

required
mode DeleteMode

determina si el registro será eliminado de la Base de Datos ó actualizado, por defecto Soft (actualizado).

None
Warning
  • Este método NO realiza validaciones más allá de los parámetros y tipos de datos enviados, se recomienda validar todos los datos antes de invocar a este método.

Raises:

Type Description
PyMongoError

excepciones generadas por PyMongo.

Returns:

Type Description
Optional[Any]

Un objeto de tipo DeleteResult|UpdateResult si el registro fué eliminado/actualizado con exito, ó None en caso de error

Examples:

...
filters = dict[str, Any] = {
    "field_1": "value_1",
    "field_2": "value_2"
}

many_docs = awesome_coll(request.app.mongo_db)
...

# ejemplo 1
result = await many_docs.remove_multi(filters)

# ejemplo 2
result = await many_docs.remove_multi(filters, DeleteMode.Soft)

# ejemplo 3
result = await many_docs.remove_multi(filters, DeleteMode.Hard)

custom_query(filters, select_fields=None, exclude_fields=None, sort_by=None, limit=0) async

Obtiene registros de la Base de Datos, con base a filtros definidos por el usuario, adicionalmente se puede fijar una lista de campos a devolver, una lista de campos para ordenar la consulta y un limite para los registros consultados.

Warning

este metódo:

  • se encuentra en revisión, puede cambiar en el futuro.
  • se necesitan más pruebas y ejemplos.

Parameters:

Name Type Description Default
filters dict[str, Any]

un diccionario con valores, para realizar el filtro

required
select_fields Optional[list[str]]

una lista de campos a devolver. por defecto None.

None
exclude_fields Optional[list[str]]

una lista de campos a excluir de los resultados de la consulta, por defecto None.

None
sort_by Optional[list[str]]

una lista de campos por los cuales ordenar los resultados. por defecto None.

None
limit int

define el limite de registros a consultar. por defecto 0.

0

Returns:

Type Description
Any

usualmente un diccionario con el resultado de la consulta, o un mensaje de error

Examples:

...
self.custom_query()

raw_query(table_name, filters=None, select_fields=None, exclude_fields=None, sort_by=None, limit=0) async

Permite realizar consultas personalizadas sobre cualquier colección de la Base de Datos, con base a filtros definidos por el usuario, adicionalmente se puede fijar una lista de campos a devolver, una lista de campos para ordenar la consulta y un limite para los registros consultados

Warning

este metódo:

  • se encuentra en revisión, puede cambiar en el futuro.
  • se necesitan más pruebas y ejemplos.
Notes

Este método difiere de custom_query en que se puede realizar sobre cualquier colección (tabla), especificada por el parámetro table_name

Parameters:

Name Type Description Default
table_name str

el nombre de la colección

required
filters dict[str, Any]

un diccionario con valores, para realizar el filtro

None
select_fields list[str]

una lista de campos a devolver, por defecto None.

None
exclude_fields list[str]

una lista de campos a excluir de los resultados de la consulta, por defecto None.

None
sort_by list[str]

una lista de campos por los cuales ordenar los resultados, por defecto None.

None
limit int

define el limite de registros a consultar. por defecto 0.

0

Returns:

Type Description
Any

usualmente un diccionario con el resultado de la consulta, ó un mensaje de error

Examples:

...
self.raw_query()

to_geopoint(longitude, latitude)

Convierte una coordenada en un objeto espacial de tipo Point.

Parameters:

Name Type Description Default
longitude float

la longitud

required
latitude float

la latitud

required

Returns:

Type Description
Any

un objeto espacial(Point), ó None en caso de error

Examples:

1
2
3
...
result = self.to_geopoint(-8.6013087, 41.1415983)
>>> { type: "Point", coordinates: [-8.6013087, 41.1415983]}

from_geopoint(geo_point, as_list=False)

Devuelve las coordenadas de un objeto espacial de tipo Point.

Notes

Para más información, consulta:

Parameters:

Name Type Description Default
geo_point dict

un objeto de tipo GeoJSON (Point)

required
as_list bool

especifica sí la respuesta será un diccionario ó una lista, por defecto False (dict).

False

Returns:

Type Description
Any

las coordenadas en un diccionario, lista, ó None en caso de error

Examples:

...
my_coords: dict[str, Any] = {
    type: "Point",
    coordinates: [ -8.6013087, 41.1415983 ]
}

# ejemplo 1
self.from_geopoint(my_coords)
>>> {"longitude": -8.6013087, "latitude": 41.1415983}

# ejemplo 2
self.from_geopoint(my_coords, True)
>>> [-8.6013087, 41.1415983]

get_schema(get_id=False) async

Obtiene el schema de la colección, utilizando una consulta de agregación.

Notes

Para más información, consulta:

Parameters:

Name Type Description Default
get_id bool

define si el resultado es un objeto con toda la información, por defecto False

False

Returns:

Type Description
Any

usualmente un diccionario con el resultado de la consulta, ó un mensaje de error

Examples:

1
2
3
4
5
6
...
# ejemplo 1
self.get_schema()

# ejemplo 2
self.get_schema(True)

delete_table(table_name, drop=False) async

Elimina una colección (tabla) ó todos sus documentos (registros)

Warning

este metódo:

  • se encuentra en revisión, puede cambiar en el futuro.
  • se necesitan más pruebas y ejemplos.
Notes
  • tenga en cuenta que esta acción, no se puede deshacer.

Parameters:

Name Type Description Default
table_name str

el nombre de la colección

required
drop bool

especifica si eliminará la colección, por defecto False

False

Raises:

Type Description
TypeCheckError

error de tipos emitido por typeguard

maximum recursion depth exceeded

error de recursion, en caso de que no se pueda definir el valor de retorno de la propiedad __tablename__

Returns:

Type Description
Any

usualmente un diccionario con el resultado de la consulta, ó un mensaje de error

Examples:

1
2
3
4
5
6
7
8
...
# ejemplo 1
# borra la colección y todos sus documentos
self.delete_table("awesome_collection", True)

# ejemplo 2
# borra todos los documentos, pero no la colección
self.delete_table("awesome_collection")

get_all_collections() async

Devuelve la lista de todas las colecciones de la Base de Datos.

Returns:

Type Description
Any

usualmente una lista de elementos con el resultado de la consulta, ó None en caso de error

Examples:

...
self.get_all_collections()

geo_nearest_query(select_fields, geo_field, geo_point, min_mts=0, max_mts=1000) async

Realiza una consulta radial utilizando $near y $geometry de MongoDB.

Parameters:

Name Type Description Default
select_fields list[str]

una lista con los posibles, campos de los registros a retornar

required
geo_field str

un campo de tipo <location field> que contiene información espacial

required
geo_point dict

un objeto espacial de tipo Point

required
min_mts int

limita los resultados a aquellos documentos que se encuentran al menos a la distancia especificada del punto central, por defecto 0

0
max_mts int

limita los resultados a los documentos que se encuentran como máximo a la distancia especificada del punto central, por defecto 1000

1000
Warning

este metódo:

  • se encuentra en revisión, puede cambiar en el futuro.
  • se necesita más pruebas y ejemplos.
Notes
  • $near: requiere un índice geoespacial.
  • 2dsphere index: si se especifica un punto GeoJSON, para este caso.

Para más información, consulta:

Returns:

Type Description
Any

usualmente una lista de elementos con el resultado de la consulta, ó un mensaje de error

Examples:

...
self.geo_nearest_query()

geo_within_bbox(select_fields, geo_field, bounding_box) async

Realiza una consulta espacial, y devuelve todos los documentos que se encuentren dentro de los límites de un bounding box(abreviado 'bbox').

Parameters:

Name Type Description Default
select_fields list[str]

una lista con los posibles campos de los registros a retornar

required
geo_field str

un campo de tipo <location field> que contiene información espacial

required
bounding_box list[dict]

una lista de objetos espaciales de tipo Point, serán los puntos del bounding box

required
Warning

este metódo:

  • se encuentra en revisión, puede cambiar en el futuro.
  • se necesitan más pruebas y ejemplos.
Notes

Para más información, consulta:

Returns:

Type Description
Any

usualmente una lista de elementos con el resultado de la consulta, ó un mensaje de error

Examples:

...
self.geo_within_bbox()

geo_within_sphere(select_fields, geo_field, geo_point, distance=1000) async

Realiza una consulta espacial, y devuelve todos los documentos que se encuentren dentro de los límites de un círculo que utiliza geometría esférica.

Parameters:

Name Type Description Default
select_fields list[str]

una lista con los posibles campos de los registros a retornar

required
geo_field str

un campo de tipo <location field> que contiene información espacial

required
geo_point dict

un objeto espacial de tipo Point que contiene el punto central del círculo

required
distance int

la distancia desde el centro del circulo, en metros, por defecto 1000

1000
Warning

este metódo:

  • se encuentra en revisión, puede cambiar en el futuro.
  • se necesitan más pruebas y ejemplos.
Notes
  • $geoWithin y $centerSphere utilizan la milla como unidad de medida para realizar las consultas, este método, solicita la distancia en metros y realiza la conversión internamente.

Para más información, te recomendamos leer la documentación del Proyecto.

Returns:

Type Description
Any

usualmente una lista de elementos con el resultado de la consulta,

Any

ó un mensaje de error

Examples:

...
self.geo_within_sphere()

geo_within_polygon(select_fields, geo_field, poly_fields) async

Realiza una consulta espacial, y devuelve todos los documentos que se encuentren dentro de los límites de un polígono.

Parameters:

Name Type Description Default
select_fields list[str]

una lista con los posibles campos de los registros a retornar

required
geo_field str

un campo de tipo <location field> que contiene información espacial

required
poly_fields list

una lista de objetos espaciales de tipo Point, serán los puntos del polígono

required
Warning

este metódo:

  • se encuentra en revisión, puede cambiar en el futuro.
  • se necesitan más pruebas y ejemplos.
Notes

Para más información, consulta:

Returns:

Type Description
Any

usualmente una lista de elementos con el resultado de la consulta, ó un mensaje de error

Examples:

...
self.geo_within_polygon()

create_index(field, index_type, unique=False) async

Crea un índice para una colección en la Base de Datos.

Parameters:

Name Type Description Default
field str

el nombre del campo para crear el índice

required
index_type Literal

un literal con los tipos de índice a utilizar

required
unique bool

especifica si el índice será único, garantizando que los campos indexados no almacenan valores duplicados, por defecto False

False
Warning

este metódo:

  • se encuentra en revisión, puede cambiar en el futuro.
  • se necesitan más pruebas y ejemplos.
Notes
  • de momento solo se permite crear índices de tipo:
    • text
    • hashed
    • 2d
    • 2dsphere

Para más información, consulta:

Returns:

Type Description
Any

usualmente un string con el nombre del índice, ó un mensaje de error

Examples:

...
self.create_index()