当前位置:嗨网首页>书籍在线阅读

09-使用Java从MongoDB获取文档

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

10.2.1 使用Java从MongoDB获取文档

使用Java从MongoDB检索文档 在本节中,您将编写一个简单的Java应用程序,它使用find()和findOne()从示例数据库中检索文档。通过这个示例,您将熟悉如何使用方法find()和findOne()以及如何处理响应。程序清单10.3显示了这个示例的代码。 在这个示例中,方法main()连接到MongoDB数据库,获取一个DBCollection对象,再调用其他方法来查找并显示文档。 方法getOne()调用方法findOne()从集合中获取单个文档,再显示该文档;方法getManyWhile()查找所有的文档,再使用while循环和方法hasNext()逐个获取这些文档,并计算总字符数。 方法getManyFor()查找集合中的所有文档,再使用for循环和方法next()获取前5个文档。方法getManyToArray()查找集合中的所有文档,再使用方法toArray()和参数5来获取前5个文档。 请执行如下步骤,创建并运行这个在示例数据集中查找文档并显示结果的Java应用程序。 1.确保启动了MongoDB服务器。 2.确保下载并安装了Java MongoDB驱动程序,并运行了生成数据库words的脚本文件code/hour05/generate_words.js。 3.在文件夹code/hour10中新建一个文件,并将其命名为JavaFind.java。 4.在这个文件中输入程序清单10.3所示的代码。这些代码使用了方法find()和findOne()。 5.将这个文件存盘。 6.打开一个控制台窗口,并切换到目录code/hour10。 7.执行下面的命令来编译这个新建的Java文件: 8.执行下面的命令来运行这个Java应用程序。程序清单10.4显示了这个应用程序的输出。 程序清单10.3 JavaFind.java:在Java应用程序中查找并检索集合中的文档 程序清单10.4 JavaFind.java-output:在Java应用程序中查找并检索集合中文档的输出

DBCollection对象提供了方法find()和findOne(),它们与MongoDB shell中的同名方法类似,也分别查找一个和多个文档。

调用findOne()时,将以DBObject对象的方式从服务器返回单个文档,然后您就可根据需要在应用程序中使用这个对象,如下所示:

DBObject doc = myColl.findOne();

DBCollection对象的方法find()返回一个DBCursor对象,这个对象表示找到的文档,但不取回它们。可以多种不同的方式迭代DBCursor对象。

可以使用while循环和方法hasNext()来判断是否到达了游标末尾,如下所示:

DBCursor cursor = myColl.find();
while(cursor.hasNext()){
   DBObject doc = cursor.next();
   System.out.println(doc.toString());
}

还可使用方法toArray()将游标转换为Java Array对象,再使用任何Java技术迭代该对象。例如,下面的代码查找集合中的所有文档,再将前5个转换为一个List并迭代它:

DBCursor cursor = collection.find();
List<DBObject> docs = cursor.toArray(5);
for(final DBObject doc : docs) {
   System.out.println(doc.toString());
}

▼ Try It Yourself

javac JavaFind.java
java JavaFind
01 import com.mongodb.MongoClient;
02 import com.mongodb.DB;
03 import com.mongodb.DBCollection;
04 import com.mongodb.DBObject;
05 import com.mongodb.DBCursor;
06 import java.util.List;
07 public class JavaFind {
08    public static void main(String[] args) {
09       try {
10          MongoClient mongoClient = new MongoClient("localhost", 27017);
11          DB db = mongoClient.getDB("words");
12          DBCollection collection = db.getCollection("word_stats");
13          JavaFind.getOne(collection);
14          JavaFind.getManyWhile(collection);
15          JavaFind.getManyFor(collection);
16          JavaFind.getManyToArray(collection);
17       } catch (Exception e) {
18          System.out.println(e);
19       }
20    }
21    public static void getOne(DBCollection collection){
22       DBObject doc = collection.findOne();
23       System.out.println("Single Document: ");
24       System.out.println(doc.toString());
25    }
26    public static void getManyWhile(DBCollection collection){
27       DBCursor cursor = collection.find();
28       Long count = 0L;
29       while(cursor.hasNext()) {
30          DBObject doc = cursor.next();
31          count += (Long)Math.round((Double)doc.get("size"));
32       }
33       System.out.println("\nTotal characters using While loop: ");
34       System.out.println(count);
35    }
36    public static void getManyFor(DBCollection collection){
37       System.out.println("\nFor loop iteration: ");
38       DBCursor cursor = collection.find();
39       for(Integer i=0; i<5; i++){
40          DBObject doc = cursor.next();
41          System.out.println(doc.get("word"));
42       }
43    }
44    public static void getManyToArray(DBCollection collection){
45       System.out.println("\nConverted to array iteration: ");
46       DBCursor cursor = collection.find();
47       List<DBObject> docs = cursor.toArray(5);
48       for(final DBObject doc : docs) {
49          System.out.println(doc.get("word"));
50       }
51    }
52 }
Single Document:
{ "_id" : { "$oid" : "52e2992e138a073440e46378"} , "word" : "the" ,
   "first" : "t" , "last" : "e" , "size" : 3.0 , "letters" : [ "t" , "h" , "e"] ,
   "stats" : { "vowels" : 1.0 , "consonants" : 2.0} ,
   "charsets" : [ { "type" : "consonants" , "chars" : [ "t" , "h"]} ,
                     { "type" : "vowels" , "chars" : [ "e"]}]}
Total characters using While loop:
16868
For loop iteration:
the
be
and
of
a
Converted to array iteration:
the
be
and
of
a