MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoAlchemy interroga i documenti incorporati

Mongo non supporta la restituzione di documenti secondari. Puoi usare $elemMatch per filtrare in modo che vengano restituiti solo i documenti con attributi corrispondenti, ma dovrai prendere tu stesso i commenti. Potresti ottimizzare leggermente restituendo solo il campo dei commenti come segue:

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

Nota che c'era un bug con questo fino alla 0.14.3 (che ho appena rilasciato pochi minuti fa) che avrebbe causato il mancato funzionamento di results.comments.

Un'altra nota molto importante è che elem_match che sto facendo lì restituisce solo il primo elemento corrispondente. Se vuoi tutti gli elementi corrispondenti devi filtrarli tu stesso:

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