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

MongoAlchemy-forespørgsler om indlejrede dokumenter

Mongo understøtter ikke returnering af underdokumenter. Du kan bruge $elemMatch til at filtrere, så kun dokumenter med matchende attributter returneres, men du skal selv have fat i kommentarerne. Du kan optimere lidt ved kun at returnere kommentarfeltet som følger:

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

Bemærk, at der var en fejl med dette indtil 0.14.3 (som jeg netop udgav for et par minutter siden), som ville have forårsaget, at results.comments ikke virkede.

Endnu en meget vigtig bemærkning er, at den elem_match jeg laver der kun returnerer det første matchende element. Hvis du vil have alle matchende elementer, skal du selv filtrere dem:

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



  1. Docker og mongo-go-driver servervalgsfejl

  2. Vælg Max() med gruppe efter i mongodb

  3. Vil transaktioner fungere med mongodb aggregation $merge?

  4. Hvordan får du adgang til en MongoDB-database fra to Openshift-apps?