MongoDB – Enlaces a bases de datos

Como se muestra en el último capítulo de Relaciones de MongoDB, para implementar una estructura de base de datos normalizada en MongoDB, usamos el concepto Relaciones vinculadas también conocido como Enlaces a manuales en el que almacenamos manualmente la identificación del documento especificado dentro de otro documento. Sin embargo, en los casos en que el documento contiene enlaces de diferentes colecciones, podemos usar MongoDB DBRefs

DBRefs y tutorials de referencia

Como escenario de ejemplo donde usaremos DBRefs en lugar de referencias manuales, considere una base de datos donde almacenamos diferentes tipos de direcciones (casa, oficina, postal, etc.) en diferentes colecciones (address_home, address_office, address_mailing, etc.) Etc.). Ahora eso Usuario El documento de colección se refiere a una dirección, también debe indicar qué colección buscar según el tipo de dirección. En escenarios como este, cuando un documento hace referencia a documentos de muchas colecciones, debemos usar DBRefs.

Usando DBRefs

Hay tres campos en DBRefs:

  • $ ref – Este campo especifica la colección del documento especificado.

  • $ id – Este campo especifica el campo _id del documento especificado.

  • $ db – Este es un campo opcional, contiene el nombre de la base de datos en la que se encuentra el documento especificado.

Considere un documento personalizado de muestra con un campo DBRef la dirección como se muestra en el fragmento de código –

{
   "_id":ObjectId("53402597d852426020000002"),
   "address": {
   "$ref": "address_home",
   "$id": ObjectId("534009e4d852427820000002"),
   "$db": "AreaTutorial"},
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin"
}

EN la dirección El campo DBRef aquí indica que el documento de dirección especificado está en direccion de casa colección bajo punto de entrenamiento base de datos y tiene identificación 534009e4d852427820000002.

El siguiente código recorre dinámicamente la colección especificada por $ ref parámetro (direccion de casa en nuestro caso) para el documento con el identificador especificado en $ id parámetro en DBRef.

>var user = db.users.findOne({"name":"Tom Benzamin"})
>var dbRef = user.address
>db[dbRef.$ref].findOne({"_id":(dbRef.$id)})

El código anterior devuelve el siguiente documento de dirección presentado en direccion de casa colección –

{
   "_id" : ObjectId("534009e4d852427820000002"),
   "building" : "22 A, Indiana Apt",
   "pincode" : 123456,
   "city" : "Los Angeles",
   "state" : "California"
}

🚫