sql >> Base de Datos >  >> NoSQL >> MongoDB

Cree un clúster de base de datos en la nube con MongoDB Atlas

Durante años, MongoDB ha sido la base de datos NoSQL de referencia tanto para particulares como para empresas que crean aplicaciones a gran escala. Es de código abierto, fácilmente escalable y proporciona alta disponibilidad. También admite consultas muy complejas y control de concurrencia detallado.

Sin embargo, las tareas necesarias, como instalar la base de datos, ajustarla para mantener un rendimiento óptimo durante largos períodos de tiempo y asegurarla, tienden a requerir mucho esfuerzo especializado y dedicado.

Afortunadamente, existe una alternativa más sencilla: MongoDB Atlas, una versión de la base de datos en la nube totalmente administrada.

Con MongoDB Atlas, puede crear un clúster de MongoDB en cualquier proveedor de nube importante de su elección y comenzar a utilizar ese clúster en cuestión de minutos. Con la interfaz de usuario basada en navegador de Atlas, también puede configurar el clúster de manera intuitiva y monitorear su rendimiento.

En este tutorial, le mostraré cómo crear un clúster de nivel gratuito de MongoDB Atlas y usarlo en una aplicación de Python.

Requisitos

Antes de continuar, asegúrese de tener instalado y configurado lo siguiente en su computadora:

  • Python 3.4 o superior
  • pip 18.0 o superior

1. Creación de un clúster

Para poder utilizar los servicios en la nube de MongoDB, necesitará una cuenta de MongoDB Atlas. Para crear uno, vaya a su página de inicio y presione el botón Empezar gratis botón.

Después de completar el breve formulario de registro, será redirigido al asistente de creación de clústeres. En su primera sección, deberá elegir el proveedor de la nube y la región que prefiera.

Para minimizar la latencia de la red, idealmente elegiría una región que esté más cerca de su computadora. Sin embargo, por ahora, debido a que estamos creando un clúster de nivel gratuito, asegúrese de que la región que seleccione tenga un nivel gratuito disponible. Además, si utiliza una máquina virtual de Google Cloud o una instancia de Amazon EC2 como entorno de desarrollo, seleccione primero el proveedor de la nube correspondiente.

En el nivel de clúster sección, seleccione el M0 opción para crear su clúster de nivel gratuito. Ofrece 512 MB de espacio de almacenamiento, una versión reciente de MongoDB con WiredTiger como motor de almacenamiento, un conjunto de réplicas de tres nodos y un generoso ancho de banda de 10 GB por semana.

Por último, asigne un nombre significativo al clúster y presione Crear clúster. botón.

MongoDB Atlas ahora tardará unos cinco minutos en configurar su clúster.

2. Configuración del clúster

Antes de comenzar a usar el clúster, deberá proporcionar algunos detalles relacionados con la seguridad, así que cambie a Seguridad. pestaña.

Primero, en los Usuarios de MongoDB sección, debe crear un nuevo usuario para usted presionando el botón Agregar nuevo usuario botón. En el cuadro de diálogo que aparece, escriba su nombre de usuario y contraseña deseados, seleccione Leer y escribir en cualquier base de datos privilegio y presione el botón Agregar usuario botón.

A continuación, en la lista blanca de IP sección, debe proporcionar una lista de direcciones IP desde las que accederá al clúster. Por ahora, basta con proporcionar la dirección IP actual de su computadora.

Presiona Agregar dirección IP para crear una nueva entrada de dirección IP. En el cuadro de diálogo que aparece, presione Agregar dirección IP actual botón para autocompletar la entrada en la lista blanca campo. Además, si no tiene una dirección IP estática, es una buena idea marcarla como una entrada temporal marcando Guardar como lista blanca temporal. opción. Finalmente, presione Confirmar para agregar la entrada.

3. Obtener la cadena de conexión

Necesitará una cadena de conexión válida para conectarse a su clúster desde su aplicación. Para obtenerlo, vaya a Descripción general y presiona el botón Conectar botón.

En el cuadro de diálogo que se abre, seleccione Conectar su aplicación y presione la opción Estoy usando el controlador 3.6 o posterior botón. Ahora debería poder ver su cadena de conexión. No tendrá su contraseña real, por lo que tendrá que ingresarla manualmente. Después de hacerlo, tome nota de la cadena para poder usarla más tarde.

4. Instalación del controlador Python

Para poder interactuar con su clúster MongoDB Atlas mediante programación, debe tener un controlador MongoDB instalado en su computadora. Para el lenguaje de programación Python, PyMongo es el controlador más popular disponible en la actualidad. La forma recomendada de instalarlo en su computadora es usar el pip módulo como se muestra a continuación:

python3 -m pip install pymongo --user

Es posible que haya notado que su cadena de conexión de MongoDB Atlas es mongodb+srv:// URI. Para permitir que el controlador funcione con registros DNS SRV, también debe instalar el dnspython módulo. Así es como:

python3 -m pip install dnspython --user

5. Conectando al Clúster

Ahora puede usar su clúster de MongoDB desde cualquier aplicación de Python. Para seguirme, cree una nueva secuencia de comandos de Python y ábrala con cualquier editor de código.

Dentro del script, para poder interactuar con el clúster, necesitará una instancia de MongoClient clase. Como único argumento para su constructor, pase su cadena de conexión.

import pymongo



my_client = pymongo.MongoClient(

    'mongodb+srv://alice:[email protected]/test?retryWrites=true'

)

El constructor anterior regresa inmediatamente y no generará ningún error. Por lo tanto, para comprobar si ha establecido correctamente una conexión, le sugiero que intente realizar una operación en el clúster. Una llamada a server_info() El método, que le brinda varios detalles sobre su instancia de MongoDB, será suficiente.

Si no hay errores en su cadena de conexión, la llamada a server_info() el método tendrá éxito. Sin embargo, si el nombre de usuario o la contraseña que especificó son incorrectos, encontrará un OperationFailure error. El siguiente código le muestra cómo atraparlo:

try:

    print("MongoDB version is %s" % 

            my_client.server_info()['version'])

except pymongo.errors.OperationFailure as error:

    print(error)

    quit(1)

Ahora puede continuar e intentar ejecutar su secuencia de comandos.

6. Inserción de documentos

La cadena de conexión predeterminada que obtiene de la interfaz web de MongoDB Atlas menciona una base de datos llamada test . Sigamos usando la misma base de datos. Así es como puede obtener una referencia:

my_database = my_client.test

Una base de datos MongoDB se compone de una o más colecciones, que no son más que grupos de documentos BSON (abreviatura de JSON binario). Su clúster de nivel gratuito en MongoDB Atlas puede tener un máximo de 500 colecciones.

En aras de un ejemplo realista, creemos una nueva colección llamada foods . Con PyMongo, no tiene que llamar explícitamente a ningún método para hacerlo. Simplemente puede hacer referencia a él como si ya existiera.

my_collection = my_database.foods

Vale la pena mencionar que el código anterior no crea los foods colección inmediatamente. Se crea solo después de agregarle un documento. Así que ahora vamos a crear y agregar un nuevo documento que contenga datos nutricionales sobre un alimento.

Usando el insert_one() El método es la forma más sencilla de agregar un documento a una colección. Para especificar el contenido del documento, pasa un diccionario de Python al método. El siguiente código de muestra le muestra cómo hacerlo:

my_collection.insert_one({

    "_id": 1,

    "name": "pizza",

    "calories": 266,

    "fats": {

        "saturated": 4.5,

        "trans": 0.2

    },

    "protein": 11

})

Agregar documentos uno a la vez puede ser ineficiente. Con insert_many() método, puede agregar varios documentos a su colección a la vez. Espera una matriz de diccionarios como entrada. El siguiente código agrega dos documentos más a la colección:

my_collection.insert_many([

    {

        "_id": 2,

        "name": "hamburger",

        "calories": 295, "protein": 17,

        "fats": { "saturated": 5.0, "trans": 0.8 },

    },

    {

        "_id": 3,

        "name": "taco",

        "calories": 226, "protein": 9,

        "fats": { "saturated": 4.4, "trans": 0.5 },

    }

])

El _id El campo que ve en los documentos anteriores es un campo que MongoDB utiliza como clave principal. Como tal, es inmutable y debe estar presente en todos los documentos de MongoDB. Si olvida incluirlo al crear su documento, PyMongo lo agregará automáticamente y le asignará un valor único generado automáticamente.

7. Ejecutando consultas

Cuando haya agregado algunos documentos a su colección, puede ejecutar consultas llamando a find() método, que devuelve un Cursor objeto sobre el que puedes iterar. Si no le pasa ningún argumento, find devuelve todos los documentos de la colección.

El siguiente código le muestra cómo imprimir los nombres de todos los alimentos presentes en nuestra colección:

my_cursor = my_collection.find()



for item in my_cursor:

    print(item["name"])



# Output is:

#   pizza

#   hamburger

#   taco

Si desea find() para devolver solo aquellos documentos que coincidan con criterios específicos, debe pasarle un diccionario de Python. Por ejemplo, si desea encontrar el documento cuyo name está establecido en "pizza", podría usar el siguiente código:

my_cursor = my_collection.find({

    "name": "pizza"

})

Para consultas más complejas, puede usar los operadores de consulta con nombres intuitivos de MongoDB en los diccionarios que pasa a find() método. Por ejemplo, el siguiente código le muestra cómo usar el $lt operador para encontrar documentos cuyas calories el campo está establecido en un valor inferior a 280:

my_cursor = my_collection.find({

    "calories": { "$lt": 280 }

})



for item in my_cursor:

    print("Name: %s, Calories: %d" % 

        (item["name"], item["calories"]))



# Output is:

#   Name: pizza, Calories: 266

#   Name: taco, Calories: 226

Al usar la notación de puntos, también puede usar campos anidados en sus consultas. El siguiente código le muestra cómo encontrar documentos cuyo trans campo, que está dentro de las fats campo, se establece en un valor que es mayor o igual a 0,5:

my_cursor = my_collection.find({

    "fats.trans": { "$gte": 0.5 }

})



for item in my_cursor:

    print("Name: %s, Trans fats: %.2f" % 

        (item["name"], item["fats"]["trans"]))



# Output is:

#   Name: hamburger, Trans fats: 0.80

#   Name: taco, Trans fats: 0.50

8. Actualización y eliminación de documentos

Muy similar a insert_one() y insert_many() los métodos son update_one() y update_many() métodos, que puede utilizar para cambiar el contenido de los documentos que ya están dentro de su colección. Ambos métodos de actualización, además de los nuevos datos, necesitan una consulta para concentrarse en los documentos que deben modificarse.

Puede utilizar una variedad de operadores de actualización en sus métodos de actualización. El más utilizado es $set , que le permite agregar nuevos campos o actualizar los valores de los campos existentes. El siguiente código le muestra cómo agregar dos nuevos campos llamados fiber y sugar al documento cuyo name el campo se establece en "taco":

my_collection.update_one(

    { "name": "taco" }, # query

    {

        "$set": {       # new data

            "fiber": 3.95,

            "sugar": 0.9

        }

    }

)

Si la consulta que pasa a update_one() El método devuelve más de un documento, solo se actualiza el primer documento. El update_many() método no tiene esta limitación.

Por último, usando delete_one() y delete_many() métodos, puede eliminar documentos en sus colecciones. Ambos métodos necesitan una consulta para determinar qué documentos deben eliminarse. Así es como puede eliminar todos los documentos cuyas calories el campo se establece en un valor inferior a 300:

my_collection.delete_many({

    "calories": {

        "$lt": 300

    }

})



# Deletes all the three documents