Docs Menu
Docs Home
/
Manual de base de datos
/

Referencias de bases de datos

Para muchos casos de uso en MongoDB, el modelo de datos desnormalizado donde los datos relacionados se almacenan dentro de un único El documento es óptimo. Sin embargo, en algunos casos, conviene almacenar información relacionada en documentos separados, normalmente en diferentes colecciones o bases de datos.

Importante

Esta página describe procedimientos alternativos que preceden a las $lookup y $graphLookup etapas de la pipeline.

Puedes crear una referencia de base de datos para implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

Las aplicaciones de MongoDB utilizan uno de dos métodos para relacionar documentos:

  • Las referencias manuales guardan el campo _id de un documento en otro documento como referencia. La aplicación ejecuta una segunda query para devolver los datos relacionados. Estas referencias son simples y suficientes para la mayoría de los casos de uso.

  • DBRef son referencias de un documento a otro utilizando el valor del campo _id del primer documento, el nombre de la colección y, opcionalmente, el nombre de su base de datos, así como cualquier otro campo. DBRef te permiten hacer referencia más fácilmente a documentos almacenados en múltiples colecciones o bases de datos.

Para resolver DBRef, la aplicación debe realizar queries adicionales para devolver los documentos referenciados. Algunos drivers de MongoDB proporcionan métodos asistentes para permitir que los DBRef se resuelvan en documentos, pero esto no ocurre automáticamente.

Los DBRef proporcionan un formato y un tipo comunes para representar relaciones entre documentos. El formato DBRef también proporciona una semántica común para representar enlaces entre documentos si la base de datos debe interactuar con múltiples marcos y herramientas.

A menos que tengas una razón convincente para utilizar DBRefs, utiliza referencias manuales en su lugar.

Una referencia manual es la práctica de incluir el campo _id de un documento en otro. Luego, la aplicación puede emitir una segunda query para resolver los campos referenciados según sea necesario.

Para crear una referencia manual en la interfaz de usuario de MongoDB Atlas, siga estos pasos:

1
  1. Si aún no se muestra, seleccione la organización que contiene su proyecto deseado en el menú Organizations de la barra de navegación.

  2. Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.

  3. En la barra lateral, haz clic en Clusters en la sección Database.

    La página de clústeres se muestra.

2
  1. Para el clúster en que deseas añadir una referencia de base de datos, haz clic en Browse Collections.

  2. En el panel de navegación izquierdo, seleccione la base de datos.

  3. En el panel de navegación izquierdo, selecciona la colección. Este ejemplo hace referencia a una colección places.

3
  1. Haga clic en Insert Document.

  2. Haz clic en el ícono de vista JSON ({{}}).

  3. Pega los siguientes datos en el documento:

    {
    "_id": {
    "$oid": "651aea5870299b120736f442"
    },
    "name": "Broadway Center",
    "url": "bc.example.net"
    }
  4. Haga clic en Insert.

4
  1. En el panel de navegación izquierdo, selecciona otra colección. Este ejemplo hace referencia a una colección people.

  2. Haga clic en Insert Document.

  3. Haz clic en el ícono de vista JSON ({{}}).

  4. Pega los siguientes datos en el documento:

    {
    "_id": {
    "$oid": "651aebeb70299b120736f443"
    },
    "name": "Erin",
    "places_id": "651aea5870299b120736f442"
    "url": "bc.example.net/Erin"
    }
  5. Haga clic en Insert.

    Cuando una query devuelve el documento de la colección people, puedes, si es necesario, filtrar los resultados de la query de la colección places para el documento referenciado por el campo places_id.

    Para obtener más información sobre cómo ejecutar queries en MongoDB Atlas, consulta Ver, filtrar y ordenar documentos en la documentación de MongoDB Atlas.

Considere la siguiente operación para insertar dos documentos, usando el campo _id del primer documento como referencia en el segundo documento:

original_id = ObjectId()
db.places.insertOne({
"_id": original_id,
"name": "Broadway Center",
"url": "bc.example.net"
})
db.people.insertOne({
"name": "Erin",
"places_id": original_id,
"url": "bc.example.net/Erin"
})

Luego, cuando una query devuelva el documento de la colección people, puedes, si es necesario, realizar una segunda query para el documento al que hace referencia el campo places_id en la colección places.

Para casi todos los casos en los que se desee almacenar una relación entre dos documentos, se deben usar referencias manuales. Las referencias son fáciles de crear y la aplicación puede resolver referencias según sea necesario.

La única limitación de la vinculación manual es que estas referencias no transmiten los nombres de la base de datos y de las colecciones. Si tienes documentos en una sola colección que se relacionan con documentos de más de una colección, es posible que debas considerar usar DBRefs.

Los DBRefs son una convención para representar un documento, en lugar de un tipo de referencia específico. Incluyen el nombre de la colección y, en algunos casos, el nombre de la base de datos, además del valor del campo _id.

Opcionalmente, los DBRefs pueden incluir cualquier cantidad de otros campos. Los nombres de los campos extra deben seguir cualquier regla para nombres de campo impuestas por la versión del servidor.

Los DBRefs tienen los siguientes campos:

$ref

El campo $ref contiene el nombre de la colección en que reside el documento referenciado.

$id

El campo $id contiene el valor del campo _id en el documento referenciado.

$db

Opcional.

Contiene el nombre de la base de datos en que se encuentra el documento referenciado.

Ejemplo

Los documentos DBRef se asemejan al siguiente documento:

{ "$ref" : <value>, "$id" : <value>, "$db" : <value> }

Considere un documento de una colección que almacenó un DBRef en un campo creator:

{
"_id" : ObjectId("5126bbf64aed4daf9e2ab771"),
// .. application fields
"creator" : {
"$ref" : "creators",
"$id" : ObjectId("5126bc054aed4daf9e2ab772"),
"$db" : "users",
"extraField" : "anything"
}
}

El DBRef en este ejemplo apunta a un documento en la colección creators de la base de datos users que tiene ObjectId("5126bc054aed4daf9e2ab772") en su campo _id. También contiene un campo opcional.

Nota

El orden de los campos en el DBRef es importante, y debe usar la secuencia anterior al utilizar un DBRef.

Controlador
Soporte para DBRef
notas

C

No es compatible

Puedes recorrer las referencias manualmente.

C++

No es compatible

Puedes recorrer las referencias manualmente.

C#

Admitido

Por favor, consulte la página del controlador C# para obtener más información.

Go

No es compatible

Puedes recorrer las referencias manualmente.

Haskell

No es compatible

Puedes recorrer las referencias manualmente.

Java

Admitido

Consulta la página del controlador Java para obtener más información.

Node.js

Admitido

Consulta la página del controlador Node.js para obtener más información.

Perl

Admitido

Por favor, consulte la página del controlador Perl para obtener más información.

PHP

No es compatible

Puedes recorrer las referencias manualmente.

Python

Admitido

Consulta la página del controlador PyMongo para obtener más información.

Ruby

Admitido

Consulta la página del controlador de Ruby para obtener más información.

Scala

No es compatible

Puedes recorrer las referencias manualmente.

En la mayoría de los casos deberías usar el método de referencia manual para conectar dos o más documentos relacionados. Sin embargo, si necesitas consultar documentos de varias colecciones, considera usar DBRefs.

Volver

Control de versiones del esquema

En esta página