sql >> Base de Datos >  >> NoSQL >> MongoDB

Consulta un documento sobre elementos de matriz en MongoDB usando Java

Tiene un documento anidado en este caso. Su documento tiene un campo Notification que es una matriz que almacena múltiples subobjetos con el campo url . Para buscar en un subcampo, debe usar la sintaxis de puntos:

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

Sin embargo, esto devolverá el documento completo con la Notification completa. formación. Es probable que solo desee el subdocumento. Para filtrar esto, debe usar la versión de dos argumentos de Collection.find .

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

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

El .$ significa "solo la primera entrada de esta matriz que coincide con el operador de búsqueda"

Esto aún debería devolver un documento con una sub-matriz Notifications , pero esta matriz solo debe contener la entrada donde url == "www.example.com" .

Para recorrer este documento con Java, haga esto:

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

Por cierto: Cuando su base de datos crezca, es probable que tenga problemas de rendimiento, a menos que cree un índice para acelerar esta consulta:

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