MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Interroger un document sur des éléments de tableau dans MongoDB à l'aide de Java

Vous avez un document imbriqué dans ce cas. Votre document a un champ Notification qui est un tableau stockant plusieurs sous-objets avec le champ url . Pour rechercher dans un sous-champ, vous devez utiliser la syntaxe à points :

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

Cependant, cela renverra l'intégralité du document avec l'intégralité de la Notification déployer. Vous ne voulez probablement que le sous-document. Pour filtrer cela, vous devez utiliser la version à deux arguments 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);

Le .$ signifie "seulement la première entrée de ce tableau qui correspond à l'opérateur de recherche"

Cela devrait toujours renvoyer un document avec un sous-tableau Notifications , mais ce tableau ne doit contenir que l'entrée où url == "www.example.com" .

Pour parcourir ce document avec Java, procédez comme suit :

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

Au fait : Lorsque votre base de données grossit, vous rencontrerez probablement des problèmes de performances, à moins que vous ne créiez un index pour accélérer cette requête :

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