MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoAlchemy interroge les documents intégrés

Mongo ne prend pas en charge le renvoi de sous-documents. Vous pouvez utiliser $elemMatch pour filtrer afin que seuls les documents avec des attributs correspondants soient renvoyés, mais vous devrez récupérer les commentaires vous-même. Vous pourriez légèrement optimiser en renvoyant uniquement le champ de commentaires comme suit :

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

Notez qu'il y avait un bogue avec cela jusqu'à 0.14.3 (que je viens de publier il y a quelques minutes) qui aurait empêché résultats.comments de fonctionner.

Une autre remarque très importante est que le elem_match que je fais ici ne renvoie que le premier élément correspondant. Si vous voulez tous les éléments correspondants, vous devez les filtrer vous-même :

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