In questo caso hai un documento nidificato. Il tuo documento ha un campo Notification
che è un array che memorizza più oggetti secondari con il campo url
. Per cercare in un sottocampo, devi usare la sintassi del punto:
BasicDBObject query=new BasicDBObject("Notification.url","www.adf.com");
Questo, tuttavia, restituirà l'intero documento con l'intero Notification
Vettore. Probabilmente vuoi solo il documento secondario. Per filtrarlo, devi usare la versione a due argomenti di Collection.find
.
BasicDBObject query=new BasicDBObject("Notification.url","www.example.com");
BasicDBObject fields=new BasicDBObject("Notification.$", 1);
DBCursor f = con.coll.find(query, fields);
Questo dovrebbe comunque restituire un documento con un sottoarray Notifications
, ma questo array dovrebbe contenere solo la voce dove url == "www.example.com"
.
Per attraversare questo documento con Java, procedere come segue:
BasicDBList notifications = (BasicDBList) f.next().get("Notification");
BasicDBObject notification = (BasicDBObject) notifications.get(0);
String url = notification.get("url");
A proposito: Quando il tuo database cresce, probabilmente incontrerai problemi di prestazioni, a meno che tu non crei un indice per velocizzare questa query:
con.coll.ensureIndex(new BasicDBObject("Notification.url", 1));