MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Fragen Sie ein Dokument nach Array-Elementen in MongoDB mit Java ab

In diesem Fall haben Sie ein verschachteltes Dokument. Ihr Dokument hat ein Feld Notification Dies ist ein Array, das mehrere Unterobjekte mit dem Feld url speichert . Um in einem Unterfeld zu suchen, müssen Sie die Punktsyntax verwenden:

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

Dadurch wird jedoch das gesamte Dokument mit der gesamten Notification zurückgegeben Reihe. Sie möchten wahrscheinlich nur das Unterdokument. Um dies zu filtern, müssen Sie die Version mit zwei Argumenten von Collection.find verwenden .

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

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

Der .$ bedeutet "nur der erste Eintrag dieses Arrays, auf den der find-Operator passt"

Dies sollte immer noch ein Dokument mit einem Unterarray Notifications zurückgeben , aber dieses Array sollte nur den Eintrag enthalten, wobei url == "www.example.com" .

Gehen Sie wie folgt vor, um dieses Dokument mit Java zu durchlaufen:

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

Übrigens: Wenn Ihre Datenbank wächst, werden Sie wahrscheinlich auf Leistungsprobleme stoßen, es sei denn, Sie erstellen einen Index, um diese Abfrage zu beschleunigen:

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