MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Заявете документ за елементи на масив в MongoDB с помощта на Java

В този случай имате вложен документ. Вашият документ има поле Notification което е масив, съхраняващ множество подобекти с полето url . За да търсите в подполе, трябва да използвате синтаксиса за точка:

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

Това обаче ще върне целия документ с цялото Notification масив. Вероятно искате само поддокумента. За да филтрирате това, трябва да използвате версията с два аргумента на Collection.find .

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

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

.$ означава "само първият запис от този масив, който съответства на оператора за намиране"

Това все пак трябва да върне един документ с подмасив Notifications , но този масив трябва да съдържа само записа, където url == "www.example.com" .

За да преминете през този документ с Java, направете следното:

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

Между другото: Когато вашата база данни нарасне, вероятно ще срещнете проблеми с производителността, освен ако не създадете индекс, за да ускорите тази заявка:

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Защо Spring Data MongoDB не може да инстанцира тази структура от вложен тип?

  2. mongoose:попълване в mongoose, който няма никакъв ObjectId

  3. Express JS неограничена функция за параметър на заявка?

  4. Nodejs + mongodb:Как да заявя $ref полета?

  5. Актуализация на хеширана парола с mongoose express