When I do Java, I only use org.bson.Document and code my business logic using Facade design pattern. So I do not know the internal of de-serialization so from this on it is out of my league. But one thing you can investigate is the queries received by the server.
Is the use-case generates 1 query?
or
Is the use-case generates 1 + n (books) queries?