MongoDB + Drivers

8/26

Lectura

¡Un saludo, Platzinauta!👋🏻

¡Ups! De momento esta clase no está disponible en nuestra plataforma, pero sí la tenemos en YouTube.

Para no interrumpir tu aprendizaje te dejamos el video y link para que puedas verla en YouTube.

Link a YouTube

Pronto estará disponible en Platzi como el resto de clases.

Gracias por tu comprensión y nunca pares de aprender. 💚

Aportes 30

Preguntas 6

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

¿Qué son los drivers en MongoDB?
Son las librerías que utilizamos para comunicar nuestra aplicación con nuestra base de datos.
Sin nuestros drivers no podemos trabajar con nuestros cluster de base de datos.
📝
¿Cómo agregar los drivers dentro de nuestro proyecto?
Usamos un gestor de dependencias. Lo agregamos en nuestro gestor de dependencia; si usamos NodeJS, utilizamos ‘npm install mongodb --save’.

Instalación de los drivers de MongoDB en diferentes lenguajes:

  • Python: python -m pip install pyongo
  • Node.js: npm install mongodb --save
  • Ruby: gem install mongoid
  • GO: dep ensure -add go.mongodb.org/mongo-driver/mongo

Java con maven:

# build.gradle
compile 'org.mongodb:mongo-java-driver:2.12.3'`
<dependencies>
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>2.12.3</version>
    </dependency>
</dependencies>

Para los usuarios de Node.js recomiendo que se miren el ODM Mongoose, facilita mucho todas las tareas!

Yo uso mongoose para nodejs y me va de maravilla.

https://mongoosejs.com/

Trabajando JavaScript y, ejecutando el patrón de diseño Singleton, les comparto la conexión que realizo con mongoDB.
Nota. Cabe mencionar que utilizo la dependencia mongodb.

  • Crear conexión MongoClient
const { MongoClient, ObjectId } = require('mongodb');
const { config } = require('../config/envServer');

const USER = encodeURIComponent(config.dbUser);
const PASSWORD = encodeURIComponent(config.dbPassword);
const DB_NAME = config.dbName;

// const MONGO_URI = `mongodb://${USER}:${PASSWORD}@${config.dbHost}:${config.dbPort}`;
const MONGO_URI = `mongodb+srv://${USER}:${PASSWORD}@cluster0.eh4ut.mongodb.net/test}`;
  • Obtener la base de datos
    constructor() {
        this.client = new MongoClient(MONGO_URI, { useUnifiedTopology: true });
        this.dbName = DB_NAME;
    }
  • Acceder a la colección u obtener una conexión
    connect() {
        if (!MongoLib.connection) {
            MongoLib.connection = new Promise((resolve, reject) => {
                this.client.connect((err) => {
                    if (err) reject(err);
                    console.log(`Connected succesfully to ${DB_NAME}`);
                    resolve(this.client.db(this.dbName));
                });
            });
            this.dbName = DB_NAME;
        }
        return MongoLib.connection;
    }
  • CRUD
    getAll(collection, query) {
        return this.connect().then((db) =>
            db.collection(collection).find(query).toArray()
        );
    }

    get(collection, id) {
        return this.connect().then((db) => {
            return db.collection(collection).findOne({ _id: ObjectId(id) });
        });
    }

    create(collection, data) {
        return this.connect()
            .then((db) => {
                return db.collection(collection).insertOne(data);
            })
            .then((result) => result.insertedId);
    }

    updadte(collection, id, data) {
        return this.connect()
            .then((db) => {
                return db
                    .collection(collection)
                    .updateOne(
                        { _id: ObjectId(id) },
                        { $set: data },
                        { upsert: true }
                    );
            })
            .then((result) => result.upsertedId || id);
    }

    delete(collection, id) {
        return this.connect()
            .then((db) => {
                return db
                    .collection(collection)
                    .deleteOne({ _id: ObjectId(id) });
            })
            .then(() => id);
    }

Este video solo esta disponible en youtube?..En mi oficina tienen restringido el acceso a youtube y no puedo ver el video.

operacines CRUD

C = create R = Read U = update D = delete

yo uso mongoose para nodejs 👌

¡La importancia de los Drivers en MongoDB!

Driver
Comunica la app con la base de datos

  • Crear instancia del client
  • Crear instancia de mongo database
  • Mongo collections (donde vive los documentos)
  • Operaciones CRUD

que lindo MongoDB está impecable y el curso hasta ahora también, así da gusto aprender!

Ademas de mongo shell, podemos construir nuestros propios métodos y clientes utilizando el driver nativo de Nodejs https://github.com/christkv/node-mongodb-native.

Crea un nuevo proyecto y genera un package.json mediante npm init -y.


$ mkdir nuevoproyecto
$ cd nuevoproyecto
$ npm init -y

☆ ¿Cómo instalar el driver de mongo mediante npm?

Para instalar el driver utiliza npm.

$ npm install mongodb

En tu código de Nodejs, simplemente importa la librería del driver.

const mongodb = require('mongodb')

☆ Ejemplo de un programa en Nodejs que se conecta a una base de datos MongoDB

Para establecer la conexión a la instancia de MongoDB, es necesario tener una base de datos en ejecución. Es posible hacer esto en la terminal usando mongod. Por default, este se localizara en el puerto 27017.

En el script de Node, crea un cliente de mongo e invoca connect utilizando una dirección URI a la base de datos, esta contiene la información de locación y puede contener nombre de usuario y contraseña.

const mongodb = require('mongodb');
const db = mongodb.MongoClient;
const url = 'mongodb://localhost:27017/prueba';

db.connect(url, (err, con) =>{
    if(err) return process.exit(0);
    console.log('Se ha conectado satisfactoriamente');
    con.close();
});

Como resultado de la ejecución de este script, se establecerá una conexión satisfactoria con el servidor. Si por el contrario se obtiene un mensaje de error, es una señal de un problema con la configuración o probablemente con la base de datos.

Las consultas realizadas en Nodejs son similares a los realizados en la shell, con la particularidad de que estos son por naturaleza asíncronos (no bloquean el sistema).

¿Qué significa CRUD y cuáles son las operaciones que realizan?
En informática, CRUD es el acrónimo de “Crear, Leer, Actualizar y Borrar” (del original en inglés: Create, Read, Update and Delete), que se usa para referirse a las funciones básicas en bases de datos o la capa de persistencia en un software.

https://www.google.com/search?q=operaciones+CRUD&rlz=1C1GCEU_esMX903MX903&oq=operaciones+CRUD&aqs=chrome..69i57j0i512l6.3358j0j7&sourceid=chrome&ie=UTF-8#:~:text=¿Qué significa CRUD,en un software.

Pregunta de examen:
¿A partir de una instancia de MongoClient puedo hacer operaciones CRUD?

MongoDB + Drivers

Los drivers son las librerías que usamos para comunicar nuestra aplicación con nuestra base de datos.

Existen algunos drivers oficiales:

  • C
  • C++
  • C#
  • Go
  • Java
  • Node.js
  • Perl
  • PHP
  • Python
  • Motor (Python Async)
  • Ruby
  • Mongoid (Ruby ODM)
  • Scala

Para agregar los drivers al proyecto usamos un gestor de dependencias. Con Java usamos Maven.

Con Python usamos Pip, por ejemplo: python -m pip install pymongo

Con NodeJS usamos NPM, por ejemplo: npm install mongodb --save

<h5>Inicio rápido transversal a la mayoría de los lenguajes (POO)</h5>
  1. Crear conexión MongoClient
  2. Obtener la base de datos MongoDatabase
  3. Acceder a una colección MongoCollection
  4. CRUD

¿alguien tiene experiencia usando MongoDB con Java? es que lo necesito para un proyecto. Agradecería mucho que me pasaran un enlace.

gracias , ahora por favor un ejemplo de conexion desde cualquier lenguaje para ilustrar mejor.

Entendido

No comprendí cómo se hace la instalación del driver.

Tengo un inconveniente con el driver para c#, tengo Visual Studio 2019
y la pagina me dice que la conecion se realiza asi
var mongoUrl = new MongoUrl(“mongodb+srv://User:<Password>@pruebachiAAA-verhd.mongodb.net”);
_client = new MongoClient(mongoUrl);
var db = _client.GetDatabase(“myfirstdb”);
var collection = db.GetCollection<Student>(“student”);
Student student = new Student(“Gino”, “Grimaldos”);
collection.InsertOne(student);

al ejecutarla tengo

MongoDB.Driver.MongoAuthenticationException: ‘Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1.’

Como puedo arreglar ello y que la conexion se mantenga

De antemano gracias profe.

🦚🦚 Mongodb Drivers 🦚🦚

Conectores oficiales a mongo desde nuestro
código.
c - c++ - PHP - Python - C# ect..
Mongoid(Ruby ODM) => nos sirve para
  => Mapear nuestra base de datos ruby a
  => documentos en mongodb.

Instación en nuestro back end:
 => Python
    >> python -m pip install pymongo
 => Node
    >> npm install mongodb --save

Genial

Existe alguno para React?
Mas bien debe ser uno en el Backend verdad? Con que lenguaje me recomiendan???

Si el lenguaje es Orientado a Objetos de inicio transversal a la mayoría de lenguajes

  1. crea conexión. una instancia de MongoClient, recibe la dirección donde se encuentra la BD
  2. Obtener la BD. Se crea una instancia de MongoDatabase donde se pasará el parámetro el nombre de la BD donde se realizará las operaciones.
  3. Acceder a una colección. Pasará el nombre de la colección donde se guardarán los documentos y a partir de MongoCollection permitirá hacer operaciones CRUD sobre nuestra BD

NodeJS.

👍👍

Conectarse a MongoDB desde C#

Definir parametros

private static IMongoClient _client;
private static IMongoDatabase _database;
private static IMongoCollection< -collection class name- > _collection;

Asignar valores a los parámetros.

_client = new MongoClient(“mongodb://localhost:27017”);
_database = _client.GetDatabase(“database name here”);
_collection = _database.GetCollection< -collection class name- >(“collection name here”);

Ejemplo tomado de: https://riptutorial.com/es/mongodb-csharp/example/23123/como-conectar-la-base-de-datos-mongodb-desde-la-aplicacion

using MongoDB.Bson;
using MongoDB.Driver;
// ...
var client = new MongoClient(
    "mongodb+srv://<username>:<password>@<cluster-address>/test?w=majority"
);
var database = client.GetDatabase("test");```