sql >> Databáze >  >> NoSQL >> MongoDB

Dotaz na dokument na prvky pole v MongoDB pomocí Java

V tomto případě máte vnořený dokument. Váš dokument obsahuje pole Notification což je pole uchovávající více dílčích objektů s polem url . Chcete-li hledat v dílčím poli, musíte použít syntaxi tečky:

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

Tím se však vrátí celý dokument s celým Notification pole. Pravděpodobně budete chtít pouze dílčí dokument. Chcete-li to filtrovat, musíte použít verzi Collection.find se dvěma argumenty .

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

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

The .$ znamená "pouze první záznam tohoto pole, který odpovídá operátoru find"

To by mělo stále vracet jeden dokument s podpolí Notifications , ale toto pole by mělo obsahovat pouze položku, kde url == "www.example.com" .

Chcete-li procházet tento dokument pomocí jazyka Java, postupujte takto:

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

Mimochodem: Když se vaše databáze rozroste, pravděpodobně narazíte na problémy s výkonem, pokud nevytvoříte index pro urychlení tohoto dotazu:

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



  1. Vytváření souboru v GridFs (MongoDb)

  2. Java&Mongo:získat objekt tam, kde existuje pole

  3. Jak Redis dosahuje vysoké propustnosti a výkonu?

  4. hdel uvnitř hget block nodejs redis