Mongo nie obsługuje zwracania poddokumentów. Możesz użyć $elemMatch do filtrowania tak, aby zwracane były tylko dokumenty z pasującymi atrybutami, ale będziesz musiał sam pobrać komentarze. Możesz nieco zoptymalizować, zwracając tylko pole komentarzy w następujący sposób:
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
Zauważ, że był w tym błąd aż do wersji 0.14.3 (którą właśnie opublikowałem kilka minut temu), który powodował, że results.comments nie działały.
Kolejna bardzo ważna uwaga jest to, że elem_match, który tam robię, zwraca tylko pierwszy pasujący element. Jeśli chcesz wszystkie pasujące elementy, musisz je samodzielnie filtrować:
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']