Могут ли DBRef содержать дополнительные поля? - PullRequest
4 голосов
/ 24 мая 2010

Я сталкивался с несколькими ситуациями при использовании MongoDB, которые требуют использования DBRef. Однако я также хотел бы кэшировать некоторые поля из ссылочного документа в самом DBRef.

{$ref:'user', $id:'10285102912A', username:'Soviut'}

Например, я могу захотеть, чтобы имя пользователя было доступно, даже если на него ссылается документ пользователя. Это дало бы мне все преимущества подхода, основанного на едином документе; Ускорение запросов и устранение необходимости выполнять разыменование вручную в моем коде. В то же время, позволяя мне использовать ссылки там, где они имеют смысл.

Идея заключается в том, что при обновлении ссылочного документа (например, пользователь меняет свое имя) мой бизнес-уровень может автоматически обновлять все документы, которые на него ссылаются.

В конечном счете, мне интересно, считается ли это хорошей формой для хранения дополнительных полей в моих DBRef? Это что-нибудь сломает? Буду ли я терять свои данные каждый раз, когда ссылка будет переписана? Будут ли такие драйверы, как pymongo, поддерживать его?

1 Ответ

4 голосов
/ 24 мая 2010

В конечном счете, мне интересно, считается ли это хорошей формой для хранения дополнительных полей в моих DBRefs?

Может быть, лучше иметь отдельные поля "кэшированные" и "ref".... это зависит от того, на что похожи ваши данные.

Буду ли я терять свои данные каждый раз, когда ссылка перезаписывается?

Вы можете, но не если выосторожный.Если вы обновляете подобъект DB ref, просто убедитесь, что вы обновляете определенные поля, которые вы хотите обновить, а не перезаписываете весь подобъект.

Помните, что ссылки являются обычными объектами.Ссылка на базу данных является стандартным, а не специальным типом.

Будут ли такие драйверы, как pymongo, поддерживать его?

Помощники разыменования драйвера будут работать.Помощники просто выполняют findOne с полями $ ref и $ id.

...