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

Forespørg et dokument på array-elementer i MongoDB ved hjælp af Java

Du har et indlejret dokument i dette tilfælde. Dit dokument har et felt Notification som er et array, der lagrer flere underobjekter med feltet url . For at søge i et underfelt skal du bruge punktsyntaksen:

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

Dette vil dog returnere hele dokumentet med hele Notification array. Du vil sandsynligvis kun have underdokumentet. For at filtrere dette skal du bruge to-argumentversionen af ​​Collection.find .

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

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

.$ betyder "kun den første indgang i dette array, som matches af find-operatoren"

Dette skulle stadig returnere ét dokument med en undergruppe Notifications , men dette array bør kun indeholde indgangen hvor url == "www.example.com" .

For at gennemse dette dokument med Java, gør dette:

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

Forresten: Når din database vokser, vil du sandsynligvis løbe ind i ydeevneproblemer, medmindre du opretter et indeks for at fremskynde denne forespørgsel:

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



  1. Node indsæt store data ved hjælp af mongoose

  2. Bigbluebutton opsætning html5 dev klient login til møde med join api call tom html-svar

  3. Hvordan vil jeg i Mongo matche alle samlingsgenstande med et større array?

  4. NestJS:Sådan implementeres sessionsbaseret brugergodkendelse