sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoAlchemy fråga inbäddade dokument

Mongo stöder inte returnering av underdokument. Du kan använda $elemMatch för att filtrera så att endast dokument med matchande attribut returneras, men du måste ta tag i kommentarerna själv. Du kan optimera något genom att bara returnera kommentarsfältet enligt följande:

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

Observera att det fanns en bugg med detta fram till 0.14.3 (som jag släppte för några minuter sedan) som skulle ha gjort att results.comments inte fungerade.

Ännu en mycket viktig anmärkning är att elem_match jag gör där endast returnerar det första matchande elementet. Om du vill ha alla matchande element måste du filtrera dem själv:

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. Hur man använder MongoDB-datamodellering för att förbättra genomströmningsoperationer

  2. hämta värden efter nyckelnamn mongodb node.js drivrutin

  3. Antalet utgående nycklar listade av infokommandot på redis-slaven överensstämmer inte med vad jag ser

  4. Mongodb:Hitta dokument med array där minst ett element inte matchar ObjectID