MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Consultar um documento em elementos de array no MongoDB usando Java


Você tem um documento aninhado neste caso. Seu documento tem um campo Notification que é um array armazenando vários subobjetos com o campo url . Para pesquisar em um subcampo, você precisa usar a sintaxe de ponto:
BasicDBObject query=new BasicDBObject("Notification.url","www.adf.com");

Isso, no entanto, retornará todo o documento com toda a Notification variedade. Você provavelmente quer apenas o subdocumento. Para filtrar isso, você precisa usar a versão de dois 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);

O .$ significa "apenas a primeira entrada desta matriz que corresponde ao operador de localização"

Isso ainda deve retornar um documento com uma sub-matriz Notifications , mas esta matriz deve conter apenas a entrada onde url == "www.example.com" .

Para percorrer este documento com Java, faça o seguinte:
BasicDBList notifications = (BasicDBList) f.next().get("Notification"); 
BasicDBObject notification = (BasicDBObject) notifications.get(0);
String url = notification.get("url");

A propósito: Quando seu banco de dados crescer, você provavelmente terá problemas de desempenho, a menos que crie um índice para acelerar essa consulta:
con.coll.ensureIndex(new BasicDBObject("Notification.url", 1));