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));