MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoAlchemy fragt eingebettete Dokumente ab

Mongo unterstützt keine Rückgabe von Filialdokumenten. Sie können $elemMatch verwenden, um zu filtern, sodass nur Dokumente mit übereinstimmenden Attributen zurückgegeben werden, aber Sie müssen die Kommentare selbst abrufen. Sie könnten etwas optimieren, indem Sie nur das Kommentarfeld wie folgt zurückgeben:

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

Beachten Sie, dass es bis Version 0.14.3 (die ich erst vor ein paar Minuten veröffentlicht habe) einen Fehler gab, der dazu geführt hätte, dass results.comments nicht funktioniert hätte.

Noch ein sehr wichtiger Hinweis ist, dass das elem_match, das ich dort mache, nur das erste übereinstimmende Element zurückgibt. Wenn Sie alle passenden Elemente haben möchten, müssen Sie diese selbst filtern:

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