2016-05-02 1 views
4

Je suis un débutant pour MongoDB et je joue avec le pilote JAVA.Confusion à propos de mongodb java driver

Je le code suivant

MongoClient client = new MongoClient(); 
DB d = client.getDB("world"); 
DBCollection c = d.getCollection("zips"); 
DBCursor cursor = c.find(); 

Maintenant, ma question est que je veux utiliser un simple curseur pour passer par les documents. La méthode getDB() est obsolète mais fonctionne correctement. Dans la documentation, il est mentionné que getDB peut être remplacé par MongoClient.getDatabase(); mais getDatabase() renvoie un MongoDatabase pas un DB. Est-ce que quelqu'un peut indiquer la façon correcte de créer un DBCursor sans utiliser de méthode obsolète?

Merci. PS: Je sais qu'il existe des frameworks tels que morphia, jongo, etc., mais gardez-les à l'écart de cette discussion. Je veux actuellement utiliser uniquement le pilote JAVA. EDIT: La différence concerne l'obtention d'un curseur dans le pilote JAVA pas entre DB et MongoClient

+0

Voir le tutoriel officiel: https://docs.mongodb.org/getting-started/java/query/#query-for-all-documents-in-a-collection – Robert

Répondre

8

Oui. C'est vrai. vous pouvez remplacer getDB par getDatabase. C'est comme ça que vous pouvez l'utiliser.

 /**** Get database ****/ 
     // if database doesn't exists, MongoDB will create it for you 
     MongoDatabase mydatabase = mongoClient.getDatabase("mydatabase"); 

     /**** Get collection/table from 'testdb' ****/ 
     // if collection doesn't exists, MongoDB will create it for you 

     FindIterable<Document> mydatabaserecords = mydatabase.getCollection("collectionName").find(); 
     MongoCursor<Document> iterator = mydatabaserecords.iterator(); 
     while (iterator.hasNext()) { 
      Document doc = iterator.next(); 
      // do something with document 
     } 

Exemple:

permet donc dire que votre document est quelque chose comme ci-dessous:

{ 
    "name": "Newton", 
    "age": 25 
} 

Ensuite, les champs peuvent être récupérés comme ci-dessous

while (iterator.hasNext()) { 
    Document doc = iterator.next(); 
    String name = doc.getString("name"); 
    int age = doc.getInteger("age"); 
    System.out.println("Name: " + name); 
    System.out.println("Age: " + age); 
} 

J'espère que cela efface votre doute.

+0

merci qui fonctionne. juste un rapide. la boucle while imprime au format Document {{city = ROCHESTER}} y at-il un analyseur JSON qui ne peut imprimer que city = ROCHESTER ou devrai-je en faire un moi-même? – Newton

+0

a édité la réponse avec un exemple. Faites-moi savoir si cela a un sens. –

+0

oui cela a parfaitement du sens. auriez-vous la gentillesse de me dire si j'ai raison sur ce qui suit: L'utilisation de FindIterable et MongoCursor donne les mêmes résultats que l'utilisation de FindIterable et MongoCursor. le seul diff est que dans le premier cas, si quelque chose d'autre que Document entre dans l'itérateur, il donnera une exception ou peut-être besoin d'être lancé et dans le second cas, tout devra être lancé. – Newton