sql >> Databasteknik >  >> NoSQL >> MongoDB

Fråga ett dokument om arrayelement i MongoDB med Java

Du har ett kapslat dokument i det här fallet. Ditt dokument har ett fält Notification som är en array som lagrar flera underobjekt med fältet url . För att söka i ett underfält måste du använda punktsyntaxen:

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

Detta kommer dock att returnera hela dokumentet med hela Notification array. Du vill förmodligen bara ha underdokumentet. För att filtrera detta måste du använda versionen med två argument av Collection.find .

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

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

.$ betyder "endast den första posten i denna array som matchas av find-operatorn"

Detta bör fortfarande returnera ett dokument med en undergrupp Notifications , men den här arrayen ska bara innehålla posten där url == "www.example.com" .

För att gå igenom detta dokument med Java, gör så här:

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

Förresten: När din databas växer kommer du sannolikt att stöta på prestandaproblem, om du inte skapar ett index för att påskynda denna fråga:

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



  1. Fastnade vid att ändra binär data till base64 (Gridfs-stream)

  2. Hur man snabbar upp mongo-frågan

  3. mongodb - Konstruera DBRef med sträng eller ObjectId

  4. Importera json från fil till mongodb med mongoimport