MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoAlchemy wyszukuje osadzone dokumenty

Mongo nie obsługuje zwracania poddokumentów. Możesz użyć $elemMatch do filtrowania tak, aby zwracane były tylko dokumenty z pasującymi atrybutami, ale będziesz musiał sam pobrać komentarze. Możesz nieco zoptymalizować, zwracając tylko pole komentarzy w następujący sposób:

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

Zauważ, że był w tym błąd aż do wersji 0.14.3 (którą właśnie opublikowałem kilka minut temu), który powodował, że results.comments nie działały.

Kolejna bardzo ważna uwaga jest to, że elem_match, który tam robię, zwraca tylko pierwszy pasujący element. Jeśli chcesz wszystkie pasujące elementy, musisz je samodzielnie filtrować:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zapowiedź ClusterControl 1.7.1:wsparcie dla PostgreSQL 11 i MongoDB 4.0, ulepszone monitorowanie

  2. Jak utworzyć obraz Docker Mongo z domyślnymi kolekcjami i danymi?

  3. MongoDB Multiple Masters w ReplicaSet

  4. Jak uzyskać ten wynik za pomocą agregatu w mongoDB?

  5. Node.js, Mongo znajduje i zwraca dane