<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: JessicaMeleroDev</title>
    <description>The latest articles on DEV Community by JessicaMeleroDev (@jessicamelerodev).</description>
    <link>https://dev.to/jessicamelerodev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F572123%2F2837e65d-ecb0-402b-b4bc-799b6825129a.jpeg</url>
      <title>DEV Community: JessicaMeleroDev</title>
      <link>https://dev.to/jessicamelerodev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jessicamelerodev"/>
    <language>en</language>
    <item>
      <title>Curiosidades del tipo de datos de MongoDB</title>
      <dc:creator>JessicaMeleroDev</dc:creator>
      <pubDate>Wed, 10 Feb 2021 17:27:06 +0000</pubDate>
      <link>https://dev.to/jessicamelerodev/curiosidades-del-tipo-de-datos-de-mongodb-3l35</link>
      <guid>https://dev.to/jessicamelerodev/curiosidades-del-tipo-de-datos-de-mongodb-3l35</guid>
      <description>&lt;p&gt;Hoy voy ha hablar sobre los distintos tipos de datos que acepta MongoDB. &lt;/p&gt;

&lt;p&gt;Sabemos que existen los datos tipo &lt;em&gt;Null&lt;/em&gt;, &lt;em&gt;Number&lt;/em&gt;, &lt;em&gt;String&lt;/em&gt;, &lt;em&gt;Boolean&lt;/em&gt; y &lt;em&gt;Array&lt;/em&gt; entre otros. Bien, pues MongoDB acepta todos estos y también documentos embebidos, expresiones regulares, datos tipo fecha, tipo &lt;em&gt;ObjectID&lt;/em&gt;, datos binarios e incluso código Javascript!! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/VelhDI6pdStJ4fvAtJ/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/VelhDI6pdStJ4fvAtJ/giphy.gif" alt="wow" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sí, puedes almacenar en un dato una función escrita en Javascript ya que, al fin y al cabo la terminal de mongo es un intérprete de Javascript.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;algun_dato&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){...}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Me parece interesante el tipo &lt;em&gt;ObjectID&lt;/em&gt;. &lt;code&gt;{"_id":ObjectId("601d90b9414ff5d41b3e0eb3")}&lt;/code&gt;&lt;br&gt;
Podemos ver que es un conjunto de 24 números y letras pero, ¿qué son estos números y letras?. &lt;br&gt;
Estos números tienen su sentido aunque no lo parezca. Los 18 primeros hacen referencia al &lt;em&gt;timestamp&lt;/em&gt;, es decir, el tiempo en milisegundos correspondientes al momento de creación del documento. Y los 6 últimos es un contador que se va autoincrementando por cada nueva inserción. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IykeJMuW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/wlym9gomyy3g8n94u7ht.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IykeJMuW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/wlym9gomyy3g8n94u7ht.png" alt="objectidMongo" width="565" height="156"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;También es curioso el tipo de dato documento embebido. Esto significa que dentro del documento hay otro documento.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;nombre&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Enki&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;edad&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;direccion&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;calle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Calle Mayor, 5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;poblacion&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alicante&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;provincia&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alicante&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pais&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Spain&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En este caso la dirección es el segundo documento. Dependiendo de la magnitud del documento principal y de la lógica empleada, podría ser conveniente separarlo en otro documento y referenciarlo.&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 ¿Qué hace mongo por detrás?
&lt;/h3&gt;

&lt;p&gt;Si quieres saber qué hace por detrás una función de mongo, simplemente ejecútala pero sin paréntesis.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mascotas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;find&lt;/span&gt;
&lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;skip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;batchSize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;cursor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;DBQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_mongo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                             &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_db&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                             &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                             &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_fullName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                             &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;_massageObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                             &lt;span class="nx"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                             &lt;span class="nx"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                             &lt;span class="nx"&gt;skip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                             &lt;span class="nx"&gt;batchSize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                             &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getQueryOptions&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getDB&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;getSession&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;readPreference&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_serverSession&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getReadPreference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;readPreference&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readPref&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;readPreference&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;readPreference&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;readConcern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_serverSession&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getReadConcern&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;readConcern&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readConcern&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;readConcern&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;level&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Así podrás ver cómo es la función que actúa por detrás cuando realizas este comando 😉&lt;/p&gt;

&lt;p&gt;Como he dicho antes, la terminal de mongo es un intérprete de Javascript, ¿qué significa esto? Significa que podemos ejecutar código Javascript en su terminal e incluso &lt;em&gt;scripts&lt;/em&gt;. &lt;br&gt;
Realmente, cuando ejecutamos estos &lt;em&gt;helpers&lt;/em&gt; de mongo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;use&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;show&lt;/span&gt; &lt;span class="nx"&gt;dbs&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;show&lt;/span&gt; &lt;span class="nx"&gt;tables&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;por detrás se está ejecutando respectivamente&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getSisterDB&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;db&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getMongo&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;getDBs&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getCollectionNames&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Os animo a que probéis este último apartado y así entender un poco más cómo funciona MongoDB.&lt;/p&gt;

&lt;p&gt;Espero que os haya servido y os haya parecido interesante. Cualquier duda o aportación, ya sabéis, dejar un comentario abajo 👇&lt;/p&gt;

</description>
      <category>mongodb</category>
    </item>
    <item>
      <title>Consultas básicas en MongoDB por terminal</title>
      <dc:creator>JessicaMeleroDev</dc:creator>
      <pubDate>Fri, 05 Feb 2021 18:59:00 +0000</pubDate>
      <link>https://dev.to/jessicamelerodev/consultas-basicas-en-mongodb-por-terminal-4kk9</link>
      <guid>https://dev.to/jessicamelerodev/consultas-basicas-en-mongodb-por-terminal-4kk9</guid>
      <description>&lt;p&gt;Si eres de las personas que no les gusta usar los distintos programas que hay para el manejo de las base de datos o simplemente quieres saber cómo manejarte por consola, aquí puedes ver algunos ejemplos de consultas básicas.&lt;/p&gt;

&lt;p&gt;Para entrar en la terminal de MongoDB ejecuta en tu terminal mongo o mongod.&lt;/p&gt;

&lt;p&gt;Si aparece algo similar a lo siguiente, entonces todo está correcto.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MongoDB shell version v4.0.11
connecting to: tu_mongo_uri
Implicit session: session { "id" : UUID("tu_mongo_id") }
MongoDB server version: 4.0.11
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Una vez dentro, puedes ejecutar el siguiente comando usando la palabra &lt;code&gt;show&lt;/code&gt; para ver todas tus bases de datos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; show databases 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;o puedes abreviarlo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; show dbs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este comando mostrará un listado de bases de datos con los GB que ocupan.&lt;/p&gt;

&lt;p&gt;Para poder ejecutar cualquier consulta tienes que seleccionar la base de datos sobre la que quieres realizar dicha consulta. Con la palabra &lt;code&gt;use&lt;/code&gt; ejecuta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; use nombre_db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este comando no muestra nada, pero ya le estás diciendo a mongo que quieres usar esa base de datos. Al igual que el comando &lt;code&gt;&amp;gt; show dbs&lt;/code&gt; que muestra las bases de datos, existe uno parecido para mostrar todas las tablas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; show tables
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;o también&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; show collections
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora hay que seleccionar la tabla o colección para poder realizar operaciones sobre ella. Para ello se usa la misma sentencia que para seleccionar una base de datos pero poniendo el nombre de nuestra tabla.&lt;/p&gt;

&lt;p&gt;Una vez seleccionada ya podemos hacer consultas sobre ella.&lt;/p&gt;

&lt;h3&gt;
  
  
  Operaciones CRUD 💻
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Find (👀)
&lt;/h4&gt;

&lt;p&gt;La primera consulta es la más sencilla, recoger todos los documentos de la tabla o colección. Ejecutamos lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; db.mascotas.find()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si queremos encontrar un documento específico filtrando por algún campo, cambiaremos &lt;code&gt;find()&lt;/code&gt; por &lt;code&gt;findOne()&lt;/code&gt; y dentro del paréntesis se pone el filtro que queremos. Como por ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; db.mascotas.findOne({nombre: "Enki"})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Create ➕
&lt;/h4&gt;

&lt;p&gt;Para crear un nuevo registro en nuestra base de datos usamos el método &lt;code&gt;save()&lt;/code&gt; y dentro de sus paréntesis ponemos los datos coincidiendo con el modelo de datos. Ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; db.mascotas.save({"nombre":"Duna", "especie":"Felino", "sexo":"Hembra", "edad":1, "propietario":"Jessica Melero"})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si todo ha ido bien mostrará:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WriteResult({ "nInserted" : 1 })
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Update ✏️
&lt;/h4&gt;

&lt;p&gt;Para poder actualizar un documento usaremos el método &lt;code&gt;updateOne()&lt;/code&gt; y la palabra &lt;code&gt;$set&lt;/code&gt;. En este caso hay que pasarle dos parámetros, el primero es el filtro por el que buscará mongo para encontrar el documento que va a editar. Y el segundo son los parámetros que se van a modificar que puede ser simplemente uno o varios. Dejo un ejemplo de cada caso.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; db.mascotas.updateOne({nombre:"Enki"}, {$set: {edad: 4})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; db.mascotas.updateOne({nombre:"Enki"}, {$set: {edad: 4, propietario: "Jessica"})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;☝️Fíjate en la segunda propiedad que vas a actualizar. Asegúrate de que está dentro de los corchetes de &lt;code&gt;$set: {}&lt;/code&gt; y no fuera. Puedes poner tantas propiedades como desees actualizar.&lt;/p&gt;

&lt;p&gt;Si todo ha ido bien aparecerá:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En el caso de que no encuentre el documento aparecerá &lt;code&gt;"matchedCount":0&lt;/code&gt; y &lt;code&gt;"modifiedCount":0&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Delete ❌
&lt;/h4&gt;

&lt;p&gt;Para eliminar un documento de la base de datos usaremos el método &lt;code&gt;deleteOne()&lt;/code&gt; y el parámetro que le pasamos es similar a cuando buscamos un documento en concreto. Voy a poner un ejemplo para que se vea mejor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; db.mascotas.deleteOne({nombre:"Duna"})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si todo va bien aparecerá algo similar al mensaje de actualizar un documento pero sin &lt;code&gt;"matchedCount":0&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{ "acknowledged" : true, "deletedCount" : 1 }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este comando para eliminar un documento, pero si quieres eliminar una colección entera entonces tienes que ejecutar el método &lt;code&gt;drop()&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; db.mascotas.drop()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si no hay ningún error aparecerá &lt;code&gt;true&lt;/code&gt;, si no puede eliminar la colección devolverá &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;ℹ️ Para salir de la consola escribe &lt;code&gt;&amp;gt; exit&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 TIP
&lt;/h2&gt;

&lt;p&gt;Como habrás podido observar, cuando haces un &lt;code&gt;find()&lt;/code&gt; o &lt;code&gt;findOne()&lt;/code&gt;, la consola te muestra todo sin formato. Existe un método llamado &lt;code&gt;pretty()&lt;/code&gt; que se coloca justo después que deja el código en formato &lt;em&gt;json&lt;/em&gt;.&lt;/p&gt;

&lt;h6&gt;
  
  
  Sin formato
&lt;/h6&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; db.mascotas.find()
{ "_id" : ObjectId("id_mongo"), "nombre" : "Enki", "especie" : "conejo", "sexo" : "Macho", "edad" : 5, "propietario" : "Jessica" }
{ "_id" : ObjectId("id_mongo"), "nombre" : "Duna", "especie" : "felino", "sexo" : "Hembra", "edad" : 1, "propietario" : "Maria" }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Con formato
&lt;/h6&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; db.mascotas.find().pretty()
{
    "_id" : ObjectId("id_mongo"),
    "nombre" : "Enki",
    "especie" : "conejo",
    "sexo" : "Macho",
    "edad" : 5,
    "propietario" : "Jessica"
}
{
    "_id" : ObjectId("id_mongo"),
    "nombre" : "Duna",
    "especie" : "felino",
    "sexo" : "Hembra",
    "edad" : 1,
    "propietario" : "Maria"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Espero que haya servido de ayuda 😊 &lt;br&gt;
Si surge algún error en algunas de estas consultas dejarla en los comentarios y las resolvemos.&lt;br&gt;
&lt;a href="https://i.giphy.com/media/SY2hQpAMLnuxtgLT5C/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/SY2hQpAMLnuxtgLT5C/giphy.gif" alt="thanks" width="480" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mongodb</category>
      <category>terminal</category>
      <category>consultas</category>
    </item>
    <item>
      <title>Creación de una API sencilla con NodeJs en Español</title>
      <dc:creator>JessicaMeleroDev</dc:creator>
      <pubDate>Wed, 03 Feb 2021 19:44:51 +0000</pubDate>
      <link>https://dev.to/jessicamelerodev/creacion-de-una-api-sencilla-con-nodejs-en-espanol-21n</link>
      <guid>https://dev.to/jessicamelerodev/creacion-de-una-api-sencilla-con-nodejs-en-espanol-21n</guid>
      <description>&lt;p&gt;En este post vamos a crear una API bastante sencilla para iniciarse en el mundo de Node y Express conectándola a una base de datos no-relacional en local.&lt;/p&gt;

&lt;h4&gt;
  
  
  Pre-requisitos 🚀
&lt;/h4&gt;

&lt;p&gt;Necesitas tener instalado:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NodeJS (&lt;a href="https://nodejs.org/es/download/" rel="noopener noreferrer"&gt;https://nodejs.org/es/download/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;MongoDB (&lt;a href="https://docs.mongodb.com/manual/administration/install-community/" rel="noopener noreferrer"&gt;https://docs.mongodb.com/manual/administration/install-community/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Tu editor de código favorito, Atom, Visual Studio, etc.&lt;/li&gt;
&lt;li&gt;MongoDB Compass (&lt;a href="https://www.mongodb.com/try/download/compass" rel="noopener noreferrer"&gt;https://www.mongodb.com/try/download/compass&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Postman o similar (&lt;a href="https://www.postman.com/downloads/" rel="noopener noreferrer"&gt;https://www.postman.com/downloads/&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si no tienes alguno, pincha en el enlace y sigue los pasos 😉&lt;/p&gt;

&lt;p&gt;El resto de dependencias las instalaremos con el gestor de paquetes de node.&lt;/p&gt;

&lt;h2&gt;
  
  
  Empezamos... 💻
&lt;/h2&gt;

&lt;p&gt;Lo primero de todo vamos a empezar definiendo lo que es una API. Una API es un conjunto de protocolos por los cuales el front se comunica con la base de datos y obtiene respuesta de sus peticiones. Existen distintos tipos de métodos de comunicación, pero los más usados son GET, POST, PUT y DELETE.&lt;/p&gt;

&lt;p&gt;Sabiendo esto, voy a dividir en 5 apartados todos los pasos a seguir para la creación de esta API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Parte I. Inicialización del proyecto.
&lt;/h3&gt;

&lt;p&gt;Lo primero de todo es crear una carpeta en un directorio y ponerle un nombre. Abrimos la terminal en el directorio de la carpeta y escribimos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tras darle a intro aparecerán una serie de preguntas como las siguientes del cuadro azul:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fv7obx1rcjzzss3zwux0a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fv7obx1rcjzzss3zwux0a.png" alt="npm-init"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Puedes ir rellenando cada pregunta o presionar enter con lo que sale por defecto.&lt;/p&gt;

&lt;p&gt;Este comando crea un archivo llamado &lt;em&gt;package.json&lt;/em&gt; el cual contiene información sobre el proyecto como el nombre, descripción, el autor... y además contendrá todas las dependencias que vayamos instalando.&lt;/p&gt;

&lt;p&gt;Los siguientes comandos son para la instalación de dependencias que se van a utilizar en el proyecto.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install express express-validator dotenv mongoose --save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install nodemon --save-dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El segundo comando son las dependencias que se usan solo en el entorno de desarrollo.&lt;/p&gt;

&lt;p&gt;ℹ️ Dejo los enlaces a la documentación oficial de las librerías instaladas&lt;br&gt;
&lt;a href="https://expressjs.com/es/4x/api.html" rel="noopener noreferrer"&gt;ExpressJS&lt;/a&gt;&lt;br&gt;
&lt;a href="https://express-validator.github.io/docs/" rel="noopener noreferrer"&gt;express-validator&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/dotenv" rel="noopener noreferrer"&gt;dotenv&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez todo instalado, hay que crear en la raíz del proyecto el archivo del que arrancará el servidor, &lt;em&gt;index.js&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F59a12pkhft7zxho8io7d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F59a12pkhft7zxho8io7d.png" alt="index"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para poder arrancar el proyecto es necesario que se edite el archivo &lt;em&gt;package.json&lt;/em&gt; y añadir las siguientes líneas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scripts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;start&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;node .&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dev&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;nodemon .&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;test&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;echo &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;Error: no test specified&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; &amp;amp;&amp;amp; exit 1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto hará que el servidor arranque con Node o con &lt;em&gt;nodemon&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;📖  &lt;strong&gt;Breve explicación&lt;/strong&gt;  📖&lt;/p&gt;

&lt;p&gt;Voy ha hablar un poco de esta librería, &lt;em&gt;nodemon&lt;/em&gt;. &lt;em&gt;Nodemon&lt;/em&gt; nos permite ver a través de la consola todas las peticiones que se van haciendo. Además, si estás codificando y guardas el archivo, &lt;em&gt;nodemon&lt;/em&gt; automáticamente te recarga el servidor sin que tengas que pararlo y volver a arrancarlo. Esta librería me parece bastante interesante de utilizar a la hora del desarrollo, por eso, como puedes ver está dentro de un apartado llamado "devDependencies" y no en "dependencies".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Seguimos... ☕&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Una vez actualizado el &lt;em&gt;package.json&lt;/em&gt;, ejecutamos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tiene que aparecer algo así:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmob4ro3a47pl1qy6u88y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmob4ro3a47pl1qy6u88y.png" alt="server_run"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hasta aquí sería la primera parte, la inicialización del proyecto y el arranque del servidor. En el siguiente apartado se crea la conexión a la base de datos y se crean las variables de entorno. &lt;/p&gt;
&lt;h3&gt;
  
  
  Parte II. Conexión a la BD y variables de entorno.
&lt;/h3&gt;

&lt;p&gt;En este apartado vamos a crear un archivo en el que crearemos la conexión a la base de datos. Antes de todo, para poder ver las tablas que se irán creando es necesario tener MongoDB Compass, ya que ahí en donde las podremos ver más fácilmente que por consola.&lt;/p&gt;

&lt;p&gt;Creamos en la raíz del proyecto una carpeta llamada &lt;em&gt;config&lt;/em&gt; y dentro un archivo &lt;em&gt;db.js&lt;/em&gt; como el siguiente:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmhy9hwkhks0270zpuc1q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmhy9hwkhks0270zpuc1q.png" alt="dbjs"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;También crearemos el archivo &lt;em&gt;.env&lt;/em&gt; en la raíz del proyecto y añadiremos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PORT=3000
DB_MONGO="url_mongo"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En el archivo &lt;em&gt;.env&lt;/em&gt;, la variable &lt;strong&gt;DB_MONGO&lt;/strong&gt; suele tener la siguiente estructura: &lt;code&gt;"mongodb://localhost:27017/api"&lt;/code&gt;&lt;br&gt;
Suele ser localhost si es en local. Después va el nombre de la base de datos.&lt;/p&gt;

&lt;p&gt;Una vez creado el archivo &lt;em&gt;.env&lt;/em&gt;, hay que editar el archivo &lt;em&gt;index.js&lt;/em&gt; e importar la variable &lt;strong&gt;PORT&lt;/strong&gt; y la función &lt;em&gt;conectarDB&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fdawwa9muedqf8im3xviu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fdawwa9muedqf8im3xviu.png" alt="index_mod"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como se puede ver en la imagen, los cuadrados azules representan los cambios que hay que hacer en el archivo.&lt;br&gt;
*El primero, son las importaciones de la función para conectar la base de datos &lt;code&gt;const conectarDB = require('./config/db.js')&lt;/code&gt; y el archivo de las variables de entorno &lt;code&gt;require('dotenv').config({path: '.env'})&lt;/code&gt;&lt;br&gt;
*El segundo, &lt;code&gt;conectarDB()&lt;/code&gt; es la llamada a la función de la conexión a la base de datos. &lt;br&gt;
*Y el tercero, &lt;code&gt;const port = process.env.PORT || 4000&lt;/code&gt; se puede ver que hay un 'or'. Esto significa que si el valor de la variable de entorno está en uso, cogerá por defecto el valor '4000'.&lt;/p&gt;

&lt;p&gt;Si todo a ido bien, podremos observar en la terminal lo siguiente:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fgp7ibbdzc6y14byyq2kt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fgp7ibbdzc6y14byyq2kt.png" alt="dbconect"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ya estamos conectados a nuestra base de datos!!&lt;br&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8n7bfgngnxuq9tyoef0f.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8n7bfgngnxuq9tyoef0f.gif" alt="YES"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Parte III. Creación del modelo.
&lt;/h3&gt;

&lt;p&gt;Ya tenemos lo más importante funcionando, ahora hay que crear nuestro modelo de datos. Para ello creamos una carpeta llamada &lt;em&gt;models&lt;/em&gt; que es donde se ubicarán todos los modelos. Dentro, creamos un archivo con el nombre de nuestro modelo, en mi caso lo he llamado &lt;em&gt;mascota.js&lt;/em&gt; y queda así:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0s9zddbiwk3qob1c689v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0s9zddbiwk3qob1c689v.png" alt="modelo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En este archivo se pueden ver las propiedades que va a tener nuestro modelo. &lt;/p&gt;

&lt;p&gt;Podemos ver 3 tipos de datos: &lt;strong&gt;String, Number y Date&lt;/strong&gt;. Estos tipos de datos son los más usados junto con &lt;strong&gt;Boolean&lt;/strong&gt; que en este caso no hemos utilizado. También se puede ver en el apartado &lt;em&gt;sexo&lt;/em&gt; que hay &lt;code&gt;enum:['Macho', 'Hembra']&lt;/code&gt;. El &lt;em&gt;enum&lt;/em&gt; hace que solo se permitan los valores que hay entre los [], sino coinciden con esos, salta un error.&lt;/p&gt;

&lt;p&gt;El apartado &lt;code&gt;require: true&lt;/code&gt; hace que si a la hora de hacer una nueva inserción en la base de datos no está ese campo, saltará un error diciendo que es requerido ese campo.&lt;/p&gt;

&lt;p&gt;En cuanto al apartado&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;se puede poner así dentro de las propiedades o de esta manera que se crean los &lt;em&gt;updatedAt&lt;/em&gt; y &lt;em&gt;createdAt&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MascotaSchema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Schema&lt;/span&gt;&lt;span class="p"&gt;({...},{&lt;/span&gt;
  &lt;span class="na"&gt;timestamps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dejo aquí el enlace a la documentación de &lt;a href="https://mongoosejs.com/docs/schematypes.html" rel="noopener noreferrer"&gt;MongoDB&lt;/a&gt; para poder echar un vistazo a todos los tipos de datos y algunos ejemplos de su uso.&lt;/p&gt;

&lt;h3&gt;
  
  
  Parte IV. Creación de las rutas.
&lt;/h3&gt;

&lt;p&gt;Ya tenemos nuestro modelo, ahora ha crear las rutas para realizar las peticiones GET, POST, PUT, DELETE.&lt;/p&gt;

&lt;p&gt;Primero, creamos una carpeta llamada &lt;em&gt;routes&lt;/em&gt; y dentro el archivo &lt;em&gt;mascota.js&lt;/em&gt; en mi caso. Es &lt;strong&gt;importante&lt;/strong&gt; que los archivos se nombren en referencia a lo que hacen para así tener una idea más clara de su contenido.&lt;/p&gt;

&lt;p&gt;Las primeras lineas son las importaciones&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8b5kvkxjzfrlvqdcy7kk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8b5kvkxjzfrlvqdcy7kk.png" alt="routeimp"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Después ya van las rutas. Vamos a empezar con la ruta de creación de una mascota, en este caso usamos POST.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmm46srjo2ybsi5zbp21w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmm46srjo2ybsi5zbp21w.png" alt="postroute"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como sale en la imagen, hay 3 parámetros. El parámetro 1 es la ruta misma. En este caso solo tiene '/', pero podemos poner lo que queramos como por ejemplo &lt;code&gt;router.post('/crear')&lt;/code&gt;&lt;br&gt;
El parámetro 2 utiliza &lt;em&gt;express-validator&lt;/em&gt; para comprobar que todos los campos se pasan en la llamada y en caso de faltar alguno salta el mensaje que hay en las segundas comillas &lt;em&gt;'El nombre es necesario'&lt;/em&gt;&lt;br&gt;
&lt;code&gt;check('nombre','El nombre es necesario').not().isEmpty()&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Y el parámetro 3 es la función que ejecuta la llamada a la base de datos y devuelve la respuesta del servidor. En el siguiente apartado separaremos este parámetro en un controlador y así evitar que nuestro archivo tenga tantas lineas de código y se vea mas limpio.&lt;br&gt;
ℹ️ Todo código que se repita se puede separar en un archivo y reutilizarlo.&lt;/p&gt;

&lt;p&gt;La llamada GET para recoger todos los datos quedaría así:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Febqiquud8wrprtidzsug.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Febqiquud8wrprtidzsug.png" alt="getroute"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;en este caso solo hay 2 parámetros.  &lt;/p&gt;

&lt;p&gt;❗No hay que olvidar importar este archivo en el &lt;em&gt;index.js&lt;/em&gt; de esta forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Importamos las rutas&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/mascotas&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./routes/mascota&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;❗No olvidar el &lt;code&gt;module.exports = router;&lt;/code&gt; al final del archivo.&lt;br&gt;
Una vez creadas estas dos llamadas, hay que comprobar que realmente está funcionando, en mi caso Postman.&lt;/p&gt;
&lt;h6&gt;
  
  
  POST
&lt;/h6&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhnrxwop7p7h7nt1t3yf9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhnrxwop7p7h7nt1t3yf9.png" alt="postmanPost"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h6&gt;
  
  
  RESPUESTA POST
&lt;/h6&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ff328n0aq0j2frx6qcpxw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ff328n0aq0j2frx6qcpxw.png" alt="PostmanPostRes"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h6&gt;
  
  
  GET + RESPUESTA
&lt;/h6&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1bws85sb3tjzu2elj8y8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1bws85sb3tjzu2elj8y8.png" alt="PostmanGet"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Llegado a este punto el código ya funciona!! &lt;br&gt;
&lt;a href="https://i.giphy.com/media/V5zZwAejmS58I/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/V5zZwAejmS58I/giphy.gif" alt="ok"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Parte V. Creación del controlador.
&lt;/h3&gt;

&lt;p&gt;Este apartado es el mas sencillo de todos. Se trata de separar la función que hay en la llamada y ponerla en otro archivo. Para ello, creamos una carpeta &lt;em&gt;controllers&lt;/em&gt; y dentro un archivo &lt;em&gt;mascota.js&lt;/em&gt; como este:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F74riqnxnt8g9taeib7oe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F74riqnxnt8g9taeib7oe.png" alt="controller"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;He añadido una pequeña funcionalidad dentro de cada función&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Revisar si hay errores&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;errores&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;validationResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;errores&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isEmpty&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;errores&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;errores&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;array&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto es para que compruebe que no existe ningún error antes de hacer la llamada a la base de datos. En caso afirmativo salta el error.&lt;/p&gt;

&lt;p&gt;❗ No olvidar quitar la función del archivo de rutas y sustituirlo por &lt;code&gt;router.get('/', mascotaController.recogerMascotas)&lt;/code&gt; e importarlo al principio del archivo &lt;code&gt;const mascotaController = require('../controllers/mascota')&lt;/code&gt; como muestra la imagen&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0k6zgt8jb3wi5dif96fy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0k6zgt8jb3wi5dif96fy.png" alt="routecontroller"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como práctica dejo por hacer la llamada de actualizar y de eliminar para que practiques. Más abajo dejo el enlace a mi GitHub para consultar cualquier duda.&lt;/p&gt;

&lt;p&gt;Y por fin tenemos nuestra pequeña API!!&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F370okk7q7n4o4vayhdfg.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F370okk7q7n4o4vayhdfg.gif" alt="fin"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🔗 Recursos
&lt;/h3&gt;

&lt;p&gt;GitHub (&lt;a href="https://github.com/JessicaMeleroDev/SIMPLE-CRUD-API-NODEJS" rel="noopener noreferrer"&gt;https://github.com/JessicaMeleroDev/SIMPLE-CRUD-API-NODEJS&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Cualquier duda no dudes en dejarla en los comentarios 😄&lt;/p&gt;

</description>
      <category>node</category>
      <category>mongodb</category>
      <category>api</category>
      <category>express</category>
    </item>
  </channel>
</rss>
