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 鈥榥pm 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 鈥淐rear, 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(鈥渕ongodb+srv://User:<Password>@pruebachiAAA-verhd.mongodb.net鈥);
_client = new MongoClient(mongoUrl);
var db = _client.GetDatabase(鈥渕yfirstdb鈥);
var collection = db.GetCollection<Student>(鈥渟tudent鈥);
Student student = new Student(鈥淕ino鈥, 鈥淕rimaldos鈥);
collection.InsertOne(student);

al ejecutarla tengo

MongoDB.Driver.MongoAuthenticationException: 鈥楿nable 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(鈥渕ongodb://localhost:27017鈥);
_database = _client.GetDatabase(鈥渄atabase name here鈥);
_collection = _database.GetCollection< -collection class name- >(鈥渃ollection 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");```