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

Interroga un documento sugli elementi dell'array in MongoDB usando Java

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

Il .$ significa "solo la prima voce di questo array che trova corrispondenza con l'operatore di ricerca"

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