Referencias de base de datos MongoDB
En el capítulo anterior sobre relaciones en MongoDB mencionamos el uso de referencias de MongoDB para normalizar los documentos de estructura de datos.
Hay dos tipos de referencias en MongoDB:
- Referencias manuales (Manual References)
- DBRefs
DBRefs vs referencias manuales
Consideremos un escenario: almacenamos diferentes direcciones (domicilio, dirección de oficina, dirección de correo, etc.) en diferentes colecciones (address_home, address_office, address_mailing, etc.).
De esta manera, al acceder a diferentes direcciones, también necesitamos especificar la colección. Si un documento hace referencia a documentos de múltiples colecciones, deberíamos usar DBRefs.
Usar DBRefs
La forma de DBRef:
{ $ref : , $id : , $db : }
El significado de los tres campos es:
- $ref: nombre de la colección
- $id: el id referenciado
- $db: nombre de la base de datos, parámetro opcional
En el siguiente ejemplo, el documento de datos de usuario usa DBRef en el campo address:
{
"_id":ObjectId("53402597d852426020000002"),
"address": {
"$ref": "address_home",
"$id": ObjectId("534009e4d852427820000002"),
"$db": "ejemplo"},
"contact": "987654321",
"dob": "01-01-1991",
"name": "Tom Benzamin"
}
addressEl campo DBRef especifica que el documento de dirección referenciado está en la colección address_home de la base de datos ejemplo, con id 534009e4d852427820000002.
En el siguiente código, especificamos el parámetro $ref (colección address_home) para buscar la información de dirección del usuario con el id especificado en la colección:
>var user = db.users.findOne({"name":"Tom Benzamin"})
>var dbRef = user.address
>db[dbRef.$ref].findOne({"_id":(dbRef.$id)})
El ejemplo anterior devolvió los datos de dirección de la colección address_home:
{
"_id" : ObjectId("534009e4d852427820000002"),
"building" : "22 A, Indiana Apt",
"pincode" : 123456,
"city" : "Los Angeles",
"state" : "California"
}
Otras extensiones