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