Utilizar Python junto a MongoDB es muy sencillo, pues su sintaxis es muy similar a la de la consola
mongo
.Instalación
La instalación de pymongo es sencilla. En Linux, procederemos a ejecutar el siguiente comando:
$ easy_install pymongo
O bien, descargamos el código fuente y lo instalamos desde la consola de Python:
$ git clone git://github.com/mongodb/mongo-python-driver.git pymongo
$ cd pymongo/
$ python setup.py install
Abrir conexión
La conexión se realiza de la siguiente manera:
>>> from pymongo import Connection
>>> conn = Connection() # Conexion local por defecto
>>> conn = Connection('miServidor', 30500) # Conexion remota a puerto 30500
Usar base de datos
Para obtener un objeto que referencia a la base de datos:
>>> db = conn.miBBDD # metodo 1
>>> db = conn['miBBDD'] # metodo 2
Usar una colección
Para obtener la colección con la que trabajar:
>>> coll = db.miColeccion # metodo 1
>>> coll = db['miColeccion'] # metodo 2
Documentos
Los documentos se mapean en Python como un diccionario:
>>> noticia = {"autor": "Rafael Hernamperez",
... "cuerpo": "Python y MongoDB",
... "etiquetas": ["Tutorial","Python","MongoDB"]}
Algunos tipos de datos especiales requieren de alguna librería específica, como
datetime
:>>> import datetime
>>> noticia = {"autor": "Rafael Hernamperez",
... "cuerpo": "Python y MongoDB",
... "etiquetas": ["Tutorial","Python","MongoDB"],
... "fecha": datetime.datetime.utcnow()}
Insertar documentos
Para insertar un documento:
>>> coll = db.noticias # Coleccion "noticias"
>>> coll.insert(noticia)
Recuperar un documento
Para recuperar un único documento simple (el primero):
>>> coll.find_one({"autor": "Rafael Hernamperez"})
Recuperar varios documentos
Para recuperar todos los documentos de una colección:
>>> for noticia in coll.find():
... print noticia
Para recuperar todos los documentos (noticias, en este caso) de un autor concreto:
>>> for noticia in coll.find({"autor": "Rafael Hernamperez"})
... print noticia
Contar documentos
Para contar todos los documentos de una colección:
>>> coll.count()
Para contar todos los documentos de un autor concreto:
>>> coll.find({"autor": "Rafael Hernamperez"}).count()
Consultas de rango
Recupera un determinado rango de documentos, delimitados por condiciones. En este caso, recupera aquellas noticias anteriores a una determinada fecha. El resultado se ordenará por autor:
>>> fecha = datetime.datetime(2010, 9, 28, 0, 0) # 2010/09/38 00:00h
... for noticia in coll.find({"fecha": {"$lt":fecha}}).sort(autor):
... print noticia
Indexación
Para indexar la colección "noticias", por fecha (de la más reciente a la más antigua) y por autor (en orden alfabético):
>>> from pymongo import ASCENDING, DESCENDING
>>> coll.create_index([("fecha", DESCENDING), ("autor", ASCENDING)])