Mongo nepodporuje vracení vnořených dokumentů. Můžete použít $elemMatch k filtrování tak, aby byly vráceny pouze dokumenty s odpovídajícími atributy, ale komentáře si budete muset chytit sami. Můžete mírně optimalizovat tím, že vrátíte pole pro komentáře následovně:
query = Book.query.filter({Book.comments:{'$elemMatch':{Comment.user_id:'user_c'}}})
query = query.fields(Book.comments.elem_match({Comment.user_id:'user_c'}))
result = query.limit(1).first()
print 'query result:', result.comments
Všimněte si, že s tím byla chyba až do verze 0.14.3 (kterou jsem právě vydal před několika minutami), která by způsobila, že by results.comments nefungovaly.
Další velmi důležitá poznámka je, že elem_match, který tam dělám, vrací pouze první odpovídající prvek. Pokud chcete všechny odpovídající prvky, musíte je filtrovat sami:
query = Book.query.filter({Book.comments:{'$elemMatch':{Comment.user_id:'user_c'}}})
result = query.limit(1).first()
print 'query result:', [c for c in result.comments if c.user_id == 'user_c']