Я работаю с 2 коллекциями MongoDB, Recipe
и Menu
. Один Menu
является комбинацией Recipe
. Обратитесь к приведенному ниже сегменту кода для получения дополнительной информации
@Document
public class Recipe {
private String id;
private String name;
private String description;
// getter and setter
}
@Document
public class Menu {
private String id;
private String name;
private List<RecipeItem> recipeItem;
// getter and setter
}
public class RecipeItem {
private String id;
private String name;
private String description;
// getter and setter
}
RecipeItem
- просто копия объекта Recipe
, который указан в коллекции Menu
Когда Menu
коллекция сохранена, вы можете добавить рецепты в меню и, следовательно, список Recipe
объектов также будет сохранен в коллекции Menu
на имя RecipeItem
. Когда любой из Recipe
обновляется, соответствующий RecipeItem
, который находится в Menu
, также должен быть обновлен. В противном случае рецепт в Меню устареет по сравнению с текущим Recipe
после обновления. Поэтому я должен выполнить итерацию коллекции Menu
, которая содержит обновленный Recipe
на Id
и должна обновить информацию рецепта в коллекции Menu
.
Таким образом, функция обновления Menu
инициирует несколько транзакции в рамках одного выполнения, и поэтому нам также необходим механизм отката. Поэтому я не очень люблю этот подход.
Я новичок в MongoDB, и я хочу проверить, является ли текущий дизайн базы данных Menu
и Recipe
правильным или неправильным? Если да, что будет оптимальным способом сделать это? Я знаю, что можно использовать ссылку на БД между коллекциями, но это влияет на производительность.