У нас есть две модели mongodb со многими отношениями - Изображения и Статьи .
Изображение может использоваться в любой статье, а статья может есть какие-либо изображения. С точки зрения пользовательского интерфейса, пользователь захочет увидеть два вида
- Просмотр статьи - статья и изображения, используемые в статье
- Просмотр изображения - изображение и все статьи, которые изображение использовалось в.
По этой причине я рассматриваю возможность использования двухсторонних ссылок с идентификаторами.
Пример схемы:
Изображения
_id: ObjectId(''),
url: '',
description: 'some description',
keywords: ['some', keywords']
articles: [] // array of references to image id's
Статьи
_id: ObjectId(''),
body: 'text body',
title: 'some title',
images: [] // array of references to image id's
Мой вопрос заключается в следующем:
Мне нужно разработать REST API для установления sh отношений. Например,
POST /articles/{id}/images // add an image to an article
В коде приложения для вышеуказанного API, если бы мне пришлось обновить как документы image
, так и article
, мне пришлось бы использовать транзакции. Является ли этот дизайн нормальным?
Другие варианты, о которых я могу подумать:
- Пусть клиент вызывает два API (другой связывает статью с изображением)
- Используйте шину сообщений, чтобы уведомить изображения о том, что статья использовала ее, и чтобы приложение обрабатывало ее, обновляя документ
image
. - Есть третья модель для обработки ссылок. Т.е.
Usages
коллекция
Я не могу думать ни о каких других вариантах или о том, что является лучшей практикой. Во многих руководствах по разработке схем mongodb говорится о двухсторонних ссылках, но не упоминается, как они обрабатываются с точки зрения разработки API.