example mongodb dbref

example - MongoDB-¿Es necesario DBREF?



@dbref (3)

Usando el tipo de datos DBREF en MongoDB, un documento puede verse como se muestra a continuación. Pero tener el campo $ref en cada fila parece redundante ya que cada fila obviamente apunta a la colección de users .

¿Hay alguna forma de hacer referencia a otros documentos sin tener el campo $ref algo redundante?

{ $id: {$oid : "4f4603820e25f4c515000001"}, title: "User group", users: [ {_id: {$ref: "users", $id: { $oid: "4f44af6a024342300e000002"}}, isAdmin: true } ] ],


A menos que utilice métodos específicos del controlador para acceder a dbref , debería ser innecesario.

En los casos en los que está administrando la unión manualmente (es decir, sabe a qué otra colección se debe "unir"), almacenar solo el ObjectId es suficiente.


De la docs :

Las referencias manuales son una alternativa, y los documentos dicen que las referencias manuales son preferibles a DBREF ( aunque no estoy seguro de por qué ). Los DBREF son útiles cuando el objeto al que se hace referencia vive en otra base de datos o donde el nombre de la colección no sería obvio.

La denormalización / incrustación es preferible a cualquier tipo de enlace, ya que entonces recibe actualizaciones atómicas y no necesita volver a consultar los datos relacionados.


En mi opinión, se debe evitar Dbref cuando se trabaja con mongodb, al menos si se trabaja con sistemas grandes que requieren escalabilidad.

Como sé, todos los controladores hacen una solicitud adicional para cargar DBRef, por lo que no es '' unirse '' dentro de la base de datos, es muy costoso.

¿Hay alguna forma de hacer referencia a otros documentos sin tener el campo $ ref algo redundante?

Sí, mantenga las referencias en la mente, cree convenciones de nomenclatura para " claves externas " (algo como RefUserId o simplemente UserId) y almacene la identificación del documento de referencia. Cargue los documentos de referencia usted mismo cuando sea necesario. También mantén los ojos abiertos para cualquier desnormalización que puedas hacer, ya que generalmente mejora el rendimiento.