sql >> Database >  >> NoSQL >> MongoDB

Vraag een document op array-elementen in MongoDB op met Java

U hebt in dit geval een genest document. Uw document heeft een veld Notification dat is een array die meerdere subobjecten opslaat met het veld url . Om in een subveld te zoeken, moet u de puntsyntaxis gebruiken:

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

Dit zal echter het hele document teruggeven met de hele Notification reeks. U wilt waarschijnlijk alleen het subdocument. Om dit te filteren, moet je de versie met twee argumenten van Collection.find gebruiken .

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

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

De .$ betekent "alleen de eerste invoer van deze array die overeenkomt met de find-operator"

Dit zou nog steeds één document moeten retourneren met een subarray Notifications , maar deze array mag alleen het item bevatten waarbij url == "www.example.com" .

Ga als volgt te werk om dit document met Java te doorlopen:

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

Trouwens: Wanneer uw database groeit, zult u waarschijnlijk prestatieproblemen tegenkomen, tenzij u een index maakt om deze zoekopdracht te versnellen:

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



  1. Hoe array-element in mongodb te verwijderen?

  2. Waarden van selectievakjes doorgeven aan database met JavaScript

  3. Java MongoDB slaat meerdere documenten tegelijk op

  4. Redis:Is ZADD beter dan O(logN) wanneer het ingevoegde element aan het begin of het einde staat?