MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Documentos incorporados de consulta do MongoAlchemy


O Mongo não oferece suporte ao retorno de subdocumentos. Você pode usar $elemMatch para filtrar para que apenas documentos com atributos correspondentes sejam retornados, mas você mesmo terá que pegar os comentários. Você pode otimizar um pouco retornando apenas o campo de comentários da seguinte forma:
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

Observe que havia um bug com isso até a versão 0.14.3 (que acabei de lançar há alguns minutos) que faria com que o results.comments não funcionasse.

Outra observação muito importante é que o elem_match que estou fazendo lá só retorna o primeiro elemento correspondente. Se você quiser todos os elementos correspondentes, você deve filtrá-los:
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']