Я понимаю, что MongoDB не должен быть реляционным, но есть некоторые вещи, которые я не вижу, как обойти отношения без дублирования данных
Тогда не парься. MongoDB не анти-реляционный, он ориентирован на документы.
В этом случае Книги и Авторы являются двумя объектами верхнего уровня. Неразумно вкладывать одну из них, они обе являются самостоятельными основными объектами.
В случае, если у каждой Книги есть только один Автор (N: 1), вполне разумно, чтобы Книга содержала «Ссылку» на Автор. Конечно, вам придется сделать два запроса. Но сильно ли это отличается от выполнения запроса на соединение? Запрос на соединение по-прежнему должен выполнить два просмотра индекса и два поиска данных. Значит, вы ничего здесь не стоите.
В случае, если каждая Книга поддерживает нескольких авторов (M: N), у вас есть несколько вариантов в зависимости от ваших потребностей.
Мне не нравится думать о MongoDB как о "нереляционном" , я думаю, что чистее было бы думать о MongoDB как о оптимизированном для запросов .
Я также только что заметил, что grails неправильно сортирует свойства id моих авторов ...
Я бы сверился напрямую с автором Grails. Похоже, они могут хранить «строки» вместо реальных ObjectIds (или MongoID). Хотя это и не критично, это может быть ошибкой.