Mongo không hỗ trợ trả lại tài liệu phụ. Bạn có thể sử dụng $ elemMatch để lọc sao cho chỉ các tài liệu có thuộc tính phù hợp mới được trả về, nhưng bạn sẽ phải tự lấy các nhận xét. Bạn có thể tối ưu hóa một chút bằng cách chỉ trả lại trường nhận xét như sau:
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
Lưu ý rằng có một lỗi xảy ra với điều này cho đến 0.14.3 (mà tôi vừa phát hành cách đây vài phút), điều này có thể khiến results.comments không hoạt động.
Một lưu ý rất quan trọng khác là elem_match mà tôi đang thực hiện ở đó chỉ trả về phần tử phù hợp đầu tiên. Nếu bạn muốn tất cả các phần tử phù hợp, bạn phải tự lọc chúng:
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']