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

Zapytanie o dokument na elementach tablicy w MongoDB za pomocą Java

W tym przypadku masz zagnieżdżony dokument. Twój dokument ma pole Notification która jest tablicą przechowującą wiele podobiektów z polem url . Aby wyszukiwać w podpolu, musisz użyć składni kropki:

BasicDBObject query=new BasicDBObject("Notification.url","www.adf.com");

Spowoduje to jednak zwrócenie całego dokumentu z całym Notification szyk. Prawdopodobnie potrzebujesz tylko poddokumentu. Aby to odfiltrować, musisz użyć dwuargumentowej wersji Collection.find .

BasicDBObject query=new BasicDBObject("Notification.url","www.example.com");
BasicDBObject fields=new BasicDBObject("Notification.$", 1);

DBCursor f = con.coll.find(query, fields);

.$ oznacza "tylko pierwszy wpis tej tablicy, który jest dopasowany przez operatora wyszukiwania"

Powinno to zwrócić jeden dokument z podtablicą Notifications , ale ta tablica powinna zawierać tylko wpis gdzie url == "www.example.com" .

Aby przeglądać ten dokument w Javie, wykonaj następujące czynności:

BasicDBList notifications = (BasicDBList) f.next().get("Notification"); 
BasicDBObject notification = (BasicDBObject) notifications.get(0);
String url = notification.get("url");

Przy okazji: Gdy baza danych się rozrośnie, prawdopodobnie napotkasz problemy z wydajnością, chyba że utworzysz indeks, aby przyspieszyć to zapytanie:

con.coll.ensureIndex(new BasicDBObject("Notification.url", 1));



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB Stowarzyszenie Wiele-do-Wiele

  2. Integrując mongodb z neo4j, czy jest jakieś API, które je połączy?

  3. AttributeError:obiekt „krotka” nie ma atrybutu „wstaw”

  4. Wdrażanie paginacji za pomocą MongoDB, Express.js i Slush

  5. Looping Array i sprawdzanie kolekcji MongoDB w pętli (async)