sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoAlchemy consulta documentos incrustados

Mongo no admite la devolución de subdocumentos. Puede usar $elemMatch para filtrar de modo que solo se devuelvan los documentos con atributos coincidentes, pero tendrá que obtener los comentarios usted mismo. Puede optimizar ligeramente devolviendo solo el campo de comentarios de la siguiente manera:

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

Tenga en cuenta que hubo un error con esto hasta 0.14.3 (que acabo de publicar hace unos minutos) que habría causado que los comentarios de resultados no funcionaran.

Otra nota muy importante es que el elem_match que estoy haciendo allí solo devuelve el primer elemento coincidente. Si desea todos los elementos coincidentes, debe filtrarlos usted mismo:

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']