<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es_ES"><generator uri="https://jekyllrb.com/" version="4.3.2">Jekyll</generator><link href="https://www.manualweb.net/feed/mongodb.xml" rel="self" type="application/atom+xml" /><link href="https://www.manualweb.net/" rel="alternate" type="text/html" hreflang="es_ES" /><updated>2026-01-29T16:33:46+01:00</updated><id>https://www.manualweb.net/feed/mongodb.xml</id><title type="html">Manual Web | Mongodb</title><subtitle>Tutoriales de programación en español.
</subtitle><author><name>manual_web</name></author><entry><title type="html">¿Qué es MongoDB?</title><link href="https://www.manualweb.net/mongodb/que-es-mongodb/" rel="alternate" type="text/html" title="¿Qué es MongoDB?" /><published>2026-01-29T16:33:46+01:00</published><updated>2026-01-29T16:33:46+01:00</updated><id>https://www.manualweb.net/mongodb/que-es-mongodb</id><content type="html" xml:base="https://www.manualweb.net/mongodb/que-es-mongodb/"><![CDATA[<p>Si tuviésemos que explicar qué es <a href="/mongodb/">MongoDB</a> podríamos decir que es una <strong>base de datos opensource NOSQL basada en documentos</strong> desarrollada por la gente de <a href="http://www.mongodb.org">10gen</a>. Aunque una vez que cogió auge la base de datos<a href="/mongodb/">MongoDB</a> pasaron a llamarse con el mismo nombre y ahora <em>la empresa y el producto se llaman <a href="/mongodb/">MongoDB</a></em>. El nombre de <a href="/mongodb/">MongoDB</a> proviene de <em>“hu<strong>mongo</strong>us”</em>, que significa enorme en inglés. <a href="/mongodb/">MongoDB</a> es una base de datos NOSQL, opensource, escrita en C++, escalable y de alto rendimiento.</p>

<h2 id="mongodb-y-los-documentos">MongoDB y los documentos</h2>

<p>El elemento principal de <a href="/mongodb/">MongoDB</a> es como almacena la información. <a href="/mongodb/">MongoDB</a> almacena toda la información en <strong>documentos JSON</strong>.</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="err">web:</span><span class="w"> </span><span class="s2">"Manual Web"</span><span class="p">,</span><span class="w">
  </span><span class="err">url:</span><span class="w"> </span><span class="s2">"http://www.manualweb.net"</span><span class="p">,</span><span class="w">
  </span><span class="err">description:</span><span class="w"> </span><span class="s2">"Tutoriales sobre Programación"</span><span class="p">,</span><span class="w">
  </span><span class="err">email:</span><span class="w"> </span><span class="s2">"contactar@manualweb.net"</span><span class="p">,</span><span class="w">
  </span><span class="err">lenguajes:</span><span class="w"> </span><span class="p">[</span><span class="s2">"java"</span><span class="p">,</span><span class="s2">"html5"</span><span class="p">,</span><span class="s2">"javascript"</span><span class="p">,</span><span class="s2">"mongodb"</span><span class="p">],</span><span class="w">
  </span><span class="err">social:</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="err">twitter:</span><span class="w"> </span><span class="s2">"manual_web"</span><span class="p">,</span><span class="w">
      </span><span class="err">facebook:</span><span class="w"> </span><span class="s2">"ManualWeb"</span><span class="w">
    </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>El almacenar la información en documentos JSON permite a <a href="/mongodb/">MongoDB</a> tener independencia del schema de almacenamiento, es decir, pueden existir más o menos campos en el documento dentro de una misma colección de documentos. Una de las cosas importantes de los documentos es que estos van tipados. Además los documentos nos permiten nuevas estructuras como arrays o subdocumentos que permitirán que de una sola consulta se recupere toda la información y evite así la necesidad de ejecutar consultas de tipo join.</p>

<h2 id="principales-características-de-mongodb">Principales características de MongoDB</h2>

<p>Aunque en los siguientes capítulos iremos viendo en detalle todas las funcionalidades de <a href="/mongodb/">MongoDB</a>, podríamos decir que las principales características de <a href="/mongodb/">MongoDB</a> son:</p>

<h3 id="alto-rendimiento">Alto rendimiento</h3>

<p>El alto rendimiento para la persistencia en <a href="/mongodb/">MongoDB</a> se basa en dos puntos: La posibilidad de tener documentos con la información anidada, evitando, de esta forma, un número elevado de operaciones de I/O. Y el soporte de índices y la posibilidad de crear índices sobre arrays y subdocumentos.</p>

<h3 id="alta-disponibilidad">Alta disponibilidad</h3>

<p><a href="/mongodb/">MongoDB</a> proporciona alta disponibilidad mediante la réplica automática conocida como <em>replica set</em>, la cual proporciona redundancia de datos y failover automático, es decir, la transferencia automática a un nuevo nodo cuando se encuentra un fallo en uno de los nodos.</p>

<h3 id="escalado-automático">Escalado Automático</h3>

<p><a href="/mongodb/">MongoDB</a> nos ofrece un escalado horizontal. Para ello el <em>sistema de sharding</em> nos permite distribuir información por diferentes cluster de máquinas.</p>]]></content><author><name>manual_web</name></author><summary type="html"><![CDATA[Si tuviésemos que explicar qué es MongoDB podríamos decir que es una base de datos opensource NOSQL basada en documentos desarrollada por la gente de 10gen. Aunque una vez que cogió auge la base de datosMongoDB pasaron a llamarse con el mismo nombre y ahora la empresa y el producto se llaman MongoDB. El nombre de MongoDB proviene de “humongous”, que significa enorme en inglés. MongoDB es una base de datos NOSQL, opensource, escrita en C++, escalable y de alto rendimiento.]]></summary></entry><entry><title type="html">Modelado One-to-One</title><link href="https://www.manualweb.net/mongodb/modelado-one-to-one-mongodb/" rel="alternate" type="text/html" title="Modelado One-to-One" /><published>2026-01-29T16:33:46+01:00</published><updated>2026-01-29T16:33:46+01:00</updated><id>https://www.manualweb.net/mongodb/modelado-one-to-one</id><content type="html" xml:base="https://www.manualweb.net/mongodb/modelado-one-to-one-mongodb/"><![CDATA[<p>En este caso vamos a realizar un modelado one-to-one en <a href="/mongodb/">MongoDB</a>, para ello vamos a utilizar las entidades Persona y Domicilio. Una persona tendrá asociado la dirección de un domicilio. Estas entidades las modelaríamos de la siguiente forma:</p>

<p><img src="/mongodb/img/one-to-one.png" alt="Modelado One-to-One" height="60px" width="300px" class="img-responsive" /></p>

<p>Los documentos JSON de ejemplo que representan a estas personas son, para el caso de la persona:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="err">nombre:</span><span class="w"> </span><span class="s2">"Víctor Cuervo"</span><span class="p">,</span><span class="w">
  </span><span class="err">edad:</span><span class="w"> </span><span class="mi">38</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Y para el caso del domicilio es:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="err">calle:</span><span class="w"> </span><span class="s2">"Alcala, 15"</span><span class="p">,</span><span class="w">
  </span><span class="err">codigo:</span><span class="w"> </span><span class="mi">28022</span><span class="p">,</span><span class="w">
  </span><span class="err">ciudad:</span><span class="w"> </span><span class="s2">"Madrid"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Para resolver el modelado one-to-one tenemos dos estrategia. La primera será la de embedding, es decir, incrustar la entidad Domicilio dentro de la entidad Persona. La segunda será la de linking, en este caso se utilizará una foreing key para mantener las relaciones.</p>

<h2 id="one-to-one-embedding">One-to-One: Embedding</h2>

<p>En este primer caso insertamos el domicilio en la colección de personas. Será un subdocumento dentro de la persona.</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="err">nombre:</span><span class="w"> </span><span class="s2">"Víctor Cuervo"</span><span class="p">,</span><span class="w">
  </span><span class="err">edad:</span><span class="w"> </span><span class="mi">38</span><span class="p">,</span><span class="w">
  </span><span class="err">dirección:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="err">calle:</span><span class="w"> </span><span class="s2">"Alcala, 15"</span><span class="p">,</span><span class="w">
    </span><span class="err">codigo:</span><span class="w"> </span><span class="mi">28022</span><span class="p">,</span><span class="w">
    </span><span class="err">ciudad:</span><span class="w"> </span><span class="s2">"Madrid"</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Lo bueno de esta estrategia es que para recuperar el domicilio de una persona simplemente tendremos que realizar una única operación de consulta.</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">db</span><span class="p">.</span><span class="nx">personas</span><span class="p">.</span><span class="nf">find</span><span class="p">({</span><span class="na">nombre</span><span class="p">:</span><span class="dl">"</span><span class="s2">Víctor Cuervo</span><span class="dl">"</span><span class="p">},{</span><span class="na">direccion</span><span class="p">:</span><span class="mi">1</span><span class="p">})</span>
</code></pre></div></div>

<h2 id="one-to-one-linking">One-to-One: Linking</h2>

<p>En este caso vamos a crear una clave dentro de la colección de personas y posteriormente la utilizaremos como foreign key dentro de la colección de domicilios. El documento de la persona tendrá un id:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="err">_id:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
  </span><span class="err">nombre:</span><span class="w"> </span><span class="s2">"Víctor Cuervo"</span><span class="p">,</span><span class="w">
  </span><span class="err">edad:</span><span class="w"> </span><span class="mi">38</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Y ese id será utilizado dentro del documento del domicilio:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="err">userid:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
  </span><span class="err">calle:</span><span class="w"> </span><span class="s2">"Alcala, 15"</span><span class="p">,</span><span class="w">
  </span><span class="err">codigo:</span><span class="w"> </span><span class="mi">28022</span><span class="p">,</span><span class="w">
  </span><span class="err">ciudad:</span><span class="w"> </span><span class="s2">"Madrid"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Para recuperar la información tendremos que realizar dos consultas. En la primera recuperaremos el id del usuario y con dicho id tendremos que acceder a la segunda colección a recuperar la dirección</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">var</span> <span class="nx">id</span> <span class="o">=</span> <span class="nx">db</span><span class="p">.</span><span class="nx">personas</span><span class="p">.</span><span class="nf">find</span><span class="p">({</span><span class="na">nombre</span><span class="p">:</span><span class="dl">"</span><span class="s2">Víctor Cuervo</span><span class="dl">"</span><span class="p">},{</span><span class="na">_id</span><span class="p">:</span><span class="mi">1</span><span class="p">})</span>
<span class="nx">db</span><span class="p">.</span><span class="nx">domicilios</span><span class="p">.</span><span class="nf">find</span><span class="p">({</span><span class="na">username</span><span class="p">:</span><span class="nx">id</span><span class="p">})</span>
</code></pre></div></div>

<p>El modelo de linking sería el más parecido a los modelo ER. Si bien <strong>es preferible aplicar una estrategia de embedding para el modelado de relaciones One-to-One en [MongoDB][1]</strong>.</p>]]></content><author><name>manual_web</name></author><summary type="html"><![CDATA[En este caso vamos a realizar un modelado one-to-one en MongoDB, para ello vamos a utilizar las entidades Persona y Domicilio. Una persona tendrá asociado la dirección de un domicilio. Estas entidades las modelaríamos de la siguiente forma:]]></summary></entry><entry><title type="html">Modelado One-to-Many</title><link href="https://www.manualweb.net/mongodb/modelado-one-to-many-mongodb/" rel="alternate" type="text/html" title="Modelado One-to-Many" /><published>2026-01-29T16:33:46+01:00</published><updated>2026-01-29T16:33:46+01:00</updated><id>https://www.manualweb.net/mongodb/modelado-one-to-many</id><content type="html" xml:base="https://www.manualweb.net/mongodb/modelado-one-to-many-mongodb/"><![CDATA[<p>En el caso del modelado one-to-many en <a href="/mongodb/">MongoDB</a> vamos a partir de dos entidades de datos en las cuales por cada instancia de la entidad demarcada con la cardinalidad unitaria existen N elementos de la entidad de cardinalidad N. Un ejemplo de entidades de datos para un modelado one-to-many en <a href="/mongodb/">MongoDB</a> sería la entrada de un blog y los comentarios que se realicen sobre la entrada del blog.</p>

<p><img src="/mongodb/img/one-to-many.png" alt="Modelado One-to-Many" height="60px" width="300px" class="img-responsive" /></p>

<p>En este caso los documentos JSON con los que contamos serán, por un lado la entrada del blog:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="err">title:</span><span class="w"> </span><span class="s2">"Línea de Código"</span><span class="p">,</span><span class="w">
  </span><span class="err">url:</span><span class="w"> </span><span class="s2">"http://lineadecodigo.com"</span><span class="p">,</span><span class="w">
  </span><span class="err">text:</span><span class="w"> </span><span class="s2">"Aprende a Programar"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Y por otro los N comentarios que existan:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="err">name:</span><span class="w"> </span><span class="s2">"Carlos Camacho"</span><span class="p">,</span><span class="w">
  </span><span class="err">created_on:</span><span class="w"> </span><span class="err">ISODate(</span><span class="s2">"2015-12-01T10:01:22Z"</span><span class="err">)</span><span class="p">,</span><span class="w">
  </span><span class="err">comment:</span><span class="w"> </span><span class="s2">"Me gusta tu blog"</span><span class="w">
</span><span class="p">}</span><span class="w">

</span><span class="p">{</span><span class="w">
  </span><span class="err">name:</span><span class="w"> </span><span class="s2">"Fran Honrubia"</span><span class="p">,</span><span class="w">
  </span><span class="err">created_on:</span><span class="w"> </span><span class="err">ISODate(</span><span class="s2">"2015-12-01T14:15:10Z"</span><span class="err">)</span><span class="p">,</span><span class="w">
  </span><span class="err">comment:</span><span class="w"> </span><span class="s2">"Gran trabajo"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Las estrategias para modelar la relación one-to-many son tres. Por un lado podemos realizar, al igual que sucedía con el modelado one-to-one una estrategia de <strong>embedding</strong> y de <strong>linking</strong>. Y en este caso tenemos otra estrategia que complementa las dos anteriores que se llama <strong>bucketing</strong>.</p>

<h2 id="one-to-many">One-to-Many</h2>

<p>Embedding En este caso vamos a tener una sola colección de documentos que será la de los post. Por cada una de las entradas del blog tendremos anidados tantos comentarios como se vayan realizando. Los comentarios se modelarán mediante un array de documentos.</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="err">title:</span><span class="w"> </span><span class="s2">"Línea de Código"</span><span class="p">,</span><span class="w">
  </span><span class="err">url:</span><span class="w"> </span><span class="s2">"http://lineadecodigo.com"</span><span class="p">,</span><span class="w">
  </span><span class="err">text:</span><span class="w"> </span><span class="s2">"Aprende a Programar"</span><span class="p">,</span><span class="w">
  </span><span class="err">comments:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="err">name:</span><span class="w"> </span><span class="s2">"Carlos Camacho"</span><span class="p">,</span><span class="w">
      </span><span class="err">created_on:</span><span class="w"> </span><span class="err">ISODate(</span><span class="s2">"2015-12-01T10:01:22Z"</span><span class="err">)</span><span class="p">,</span><span class="w">
      </span><span class="err">comment:</span><span class="w"> </span><span class="s2">"Me gusta tu blog"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="err">name:</span><span class="w"> </span><span class="s2">"Fran Honrubia"</span><span class="p">,</span><span class="w">
      </span><span class="err">created_on:</span><span class="w"> </span><span class="err">ISODate(</span><span class="s2">"2015-12-01T14:15:10Z"</span><span class="err">)</span><span class="p">,</span><span class="w">
      </span><span class="err">comment:</span><span class="w"> </span><span class="s2">"Gran trabajo"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>La parte positiva de un modelado one-to-many en <a href="/mongodb/">MongoDB</a> <strong>mediante una estrategia de embedding es que una sola consulta nos va a recuperar todos los comentarios asociados a la entrada del blog</strong>.</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">db</span><span class="p">.</span><span class="nx">post</span><span class="p">.</span><span class="nf">find</span><span class="p">({</span><span class="na">title</span><span class="p">:</span><span class="err">”</span><span class="nx">Línea</span> <span class="nx">de</span> <span class="nx">Código</span><span class="err">”</span><span class="p">},{</span><span class="na">comments</span><span class="p">:</span><span class="mi">1</span><span class="p">});</span>
</code></pre></div></div>

<p>Si bien, como contraprestación negativa tenemos que tener cuidado con:</p>

<ul>
  <li>No superar el <strong>tamaño máximo del documento que es de 16 MB.</strong></li>
  <li>El rendimiento de la escritura. Al ir añadiendo subdocumentos al array <a href="/mongodb/">MongoDB</a> tiene que ir calculando el padding del documento y puede impactar en el rendimiento de la escritura.</li>
  <li>Si tenemos muchos comentarios no podremos pedirles de forma paginada ya que la consulta nos devolverá todos los documentos. Así que la paginación quedará de mano de la aplicación.</li>
</ul>

<h2 id="one-to-many-linking">One-to-Many: Linking</h2>

<p>En este caso vamos a crear una clave en la entidad del Blog y utilizaremos esta clave como foreing key en los comentarios. De esta forma tendremos por un lado la entrada del blog:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="err">_id:</span><span class="mi">1</span><span class="p">,</span><span class="w">
  </span><span class="err">title:</span><span class="w"> </span><span class="s2">"Línea de Código"</span><span class="p">,</span><span class="w">
  </span><span class="err">url:</span><span class="w"> </span><span class="s2">"http://lineadecodigo.com"</span><span class="p">,</span><span class="w">
  </span><span class="err">text:</span><span class="w"> </span><span class="s2">"Aprende a Programar"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Y por otro lado cada uno de los comentarios con el <code class="language-plaintext highlighter-rouge">_id</code> como foreing key.</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="err">blog_entry:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
  </span><span class="err">name:</span><span class="w"> </span><span class="s2">"Carlos Camacho"</span><span class="p">,</span><span class="w">
  </span><span class="err">created_on:</span><span class="w"> </span><span class="err">ISODate(</span><span class="s2">"2015-12-01T10:01:22Z"</span><span class="err">)</span><span class="p">,</span><span class="w">
  </span><span class="err">comment:</span><span class="w"> </span><span class="s2">"Me gusta tu blog"</span><span class="w">
</span><span class="p">}</span><span class="w">

</span><span class="p">{</span><span class="w">
  </span><span class="err">blog_entry:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
  </span><span class="err">name:</span><span class="w"> </span><span class="s2">"Fran Honrubia"</span><span class="p">,</span><span class="w">
  </span><span class="err">created_on:</span><span class="w"> </span><span class="err">ISODate(</span><span class="s2">"2015-12-01T14:15:10Z"</span><span class="err">)</span><span class="p">,</span><span class="w">
  </span><span class="err">comment:</span><span class="w"> </span><span class="s2">"Gran trabajo"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Al igual que pasaba en el modelado one-to-many vamos a tener que realizar una lectura por cada uno de los comentarios que tenga asociada la entrada del blog. Así, si hay 1000 comentarios en el blog deberemos de realizar 1000 lecturas. Si bien es verdad que permite realizar otras estrategias como la de paginación de comentarios, recuperando únicamente los necesarios.</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">var</span> <span class="nx">post_id</span> <span class="o">=</span> <span class="nx">db</span><span class="p">.</span><span class="nx">post</span><span class="p">.</span><span class="nf">find</span><span class="p">({</span><span class="na">title</span><span class="p">:</span><span class="err">”</span><span class="nx">Línea</span> <span class="nx">de</span> <span class="nx">Código</span><span class="err">”</span><span class="p">},{</span><span class="na">_id</span><span class="p">:</span><span class="mi">1</span><span class="p">});</span>
  <span class="nx">db</span><span class="p">.</span><span class="nx">comments</span><span class="p">.</span><span class="nf">find</span><span class="p">({</span><span class="na">blog_entry</span><span class="p">:</span> <span class="nx">post_id</span><span class="p">}).</span><span class="nf">foreach</span><span class="p">(</span><span class="nx">doc</span><span class="p">)</span> <span class="p">{</span>
    <span class="nf">print </span><span class="p">(</span><span class="nx">doc</span><span class="p">.</span><span class="nx">name</span> <span class="o">+</span> <span class="nx">doc</span><span class="p">.</span><span class="nx">comment</span><span class="p">)</span>
<span class="p">}</span>
</code></pre></div></div>

<h2 id="one-to-many-bucketing">One-to-Many: Bucketing</h2>

<p>La estrategia de Bucketing es una estrategia intermedia entre la estrategia de embedding y la estrategia de linking. La idea es crear una colección dónde vayamos insertando los documentos, si bien, esta colección tendrá un tamaño máximo y reducido. De esta manera evitamos los problemas de padding y reposicionamiento. La colección de bucketing estará enlazada a la entidad blog mediante una estrategia de linking. Así, tendremos primero la colección de post:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="err">_id:</span><span class="mi">1</span><span class="p">,</span><span class="w">
  </span><span class="err">title:</span><span class="w"> </span><span class="s2">"Línea de Código"</span><span class="p">,</span><span class="w">
  </span><span class="err">url:</span><span class="w"> </span><span class="s2">"http://lineadecodigo.com"</span><span class="p">,</span><span class="w">
  </span><span class="err">text:</span><span class="w"> </span><span class="s2">"Aprende a Programar"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Y luego cada uno de los “buckets”:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="err">blog_entry:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
  </span><span class="err">page:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
  </span><span class="err">comments:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="err">name:</span><span class="w"> </span><span class="s2">"Carlos Camacho"</span><span class="p">,</span><span class="w">
      </span><span class="err">created_on:</span><span class="w"> </span><span class="err">ISODate(</span><span class="s2">"2015-12-01T10:01:22Z"</span><span class="err">)</span><span class="p">,</span><span class="w">
      </span><span class="err">comment:</span><span class="w"> </span><span class="s2">"Me gusta tu blog"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">

</span><span class="p">{</span><span class="w">
  </span><span class="err">blog_entry:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
  </span><span class="err">page:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
  </span><span class="err">comments:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="err">name:</span><span class="w"> </span><span class="s2">"Fran Honrubia"</span><span class="p">,</span><span class="w">
      </span><span class="err">created_on:</span><span class="w"> </span><span class="err">ISODate(</span><span class="s2">"2015-12-01T14:15:10Z"</span><span class="err">)</span><span class="p">,</span><span class="w">
      </span><span class="err">comment:</span><span class="w"> </span><span class="s2">"Gran trabajo"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Una de las cosas que hay que hacer es identificar el indicador a utilizar en la estrategia de bucketing. Puede ser el número de página de comentarios (utilizado en el ejemplo) o cualquier otro indicador, por ejemplo la fecha. Siempre hay que buscar un indicador que los distribuya lo más uniformemente. A la hora de realizar la consulta habrá que utilizar el indicador que hayamos puesto en el “bucket”.</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">var</span> <span class="nx">post_id</span> <span class="o">=</span> <span class="nx">db</span><span class="p">.</span><span class="nx">post</span><span class="p">.</span><span class="nf">find</span><span class="p">({</span><span class="na">title</span><span class="p">:</span><span class="err">”</span><span class="nx">Línea</span> <span class="nx">de</span> <span class="nx">Código</span><span class="err">”</span><span class="p">},{</span><span class="na">_id</span><span class="p">:</span><span class="mi">1</span><span class="p">});</span>
<span class="kd">var</span> <span class="nx">pageid</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span>
<span class="nx">db</span><span class="p">.</span><span class="nx">comments</span><span class="p">.</span><span class="nf">find</span><span class="p">({</span><span class="na">blog_entry</span><span class="p">:</span> <span class="nx">post_id</span><span class="p">,</span> <span class="nx">page</span><span class="o">=</span><span class="nx">pageid</span><span class="p">}).</span><span class="nf">foreach</span><span class="p">(</span><span class="nx">doc</span><span class="p">)</span> <span class="p">{</span>
  <span class="nf">print </span><span class="p">(</span><span class="nx">doc</span><span class="p">.</span><span class="nx">name</span> <span class="o">+</span> <span class="nx">doc</span><span class="p">.</span><span class="nx">comment</span><span class="p">)</span>
<span class="p">}</span>
</code></pre></div></div>]]></content><author><name>manual_web</name></author><summary type="html"><![CDATA[En el caso del modelado one-to-many en MongoDB vamos a partir de dos entidades de datos en las cuales por cada instancia de la entidad demarcada con la cardinalidad unitaria existen N elementos de la entidad de cardinalidad N. Un ejemplo de entidades de datos para un modelado one-to-many en MongoDB sería la entrada de un blog y los comentarios que se realicen sobre la entrada del blog.]]></summary></entry><entry><title type="html">Manual MongoDB</title><link href="https://www.manualweb.net/mongodb/" rel="alternate" type="text/html" title="Manual MongoDB" /><published>2026-01-29T16:33:46+01:00</published><updated>2026-01-29T16:33:46+01:00</updated><id>https://www.manualweb.net/index</id><content type="html" xml:base="https://www.manualweb.net/mongodb/"><![CDATA[<p>Dentro de este <strong>Tutorial Mongodb</strong> podrás encontrar los siguientes contenidos:</p>

<p><strong>Introducción MongoDB</strong></p>
<ul>
  
    
    
    <li><a href="/mongodb/que-es-mongodb/">¿Qué es MongoDB?</a></li>
  
</ul>

<p><strong>Modelado en MongoDB</strong></p>
<ul>
  
    
    
    <li><a href="/mongodb/modelado-one-to-one-mongodb/">Modelado One-to-One</a></li>
  
    
    
    <li><a href="/mongodb/modelado-one-to-many-mongodb/">Modelado One-to-Many</a></li>
  
</ul>

<h3 id="descargar-manual-mongodb">Descargar Manual MongoDB</h3>

<p>Puedes descargarte nuestro <a href="#">Manual MongoDB en formato PDF</a>.</p>

<p>El manual se encuentra en continua revisión, de forma automática la URL proporcionada contendrá la última versión del <strong>Tutorial MongoDB</strong>.</p>

<h3 id="ejemplos-manual-mongodb">Ejemplos Manual MongoDB</h3>

<p>A lo largo del <strong>Tutorial MongoDB</strong> se van explicando una serie de ejemplos. Podéis descargaros los ejemplos del <strong>Tutorial MongoDB</strong> desde el <a href="https://github.com/manualweb/manual-mongodb">GitHub de Manual Web</a>.</p>

<p>Si os gusta el contenido del material y los ejemplos os agradecemos si nos aportáis una estrella en GitHub.</p>

<p><a class="github-button" href="https://github.com/manualweb/manualweb" data-icon="octicon-star" data-style="mega" aria-label="Star manualweb/manualweb on GitHub">Star</a></p>

<h3 id="más-sobre-el-manual-mongodb">Más sobre el Manual MongoDB</h3>

<p>Todas las preguntas y dudas sobre Java las puedes consultar en el <a href="http://dudasprogramacion.com/bases-de-datos/mongodb">Foro sobre MongoDB</a>. Y puedes echar un ojo a los <a href="http://lineadecodigo.com/mongodb/">ejemplos sobre el lenguaje Java</a>.</p>

<script id="github-bjs" src="https://buttons.github.io/buttons.js" async="" defer="defer"></script>]]></content><author><name>manual_web</name></author><summary type="html"><![CDATA[Dentro de este Tutorial Mongodb podrás encontrar los siguientes contenidos: Introducción MongoDB ¿Qué es MongoDB? Modelado en MongoDB Modelado One-to-One Modelado One-to-Many]]></summary></entry></feed>