学习MongoDB-应用举例(利用java操作MongoDB)

Java驱动程序是MongoDB最早的驱动,已用于生产环境很长时间,十分稳定。可以到MongoDB官方网站下载驱动,驱动版本为2.9.0。

这个jar文件中,有两个包,我们会经常用到com.mongodb 和 com.mongodb.gridfs 。在Java中操作MongoDB,各种概念和shell中类似,几乎所有的方法名也都一致,我们先看个简单的例子吧:

 

    package cn.test;  

      

    import java.net.UnknownHostException;  

      

    import com.mongodb.BasicDBObject;  

    import com.mongodb.DB;  

    import com.mongodb.DBCollection;  

    import com.mongodb.DBObject;  

    import com.mongodb.Mongo;  

      

    public class Test {  

      

        public static void main(String[] args) throws UnknownHostException {  

              

            /** 

             * Mongo类代表与MongoDB服务器的连接,有多种构造函数。无参构造函数默认连接localhost:27017. 

             */  

            Mongo connection = new Mongo("localhost:20000");  

            /** 

             * DB类代表数据库,如果当前服务器上没有该数据库,会默认创建一个 

             */  

            DB db = connection.getDB("mylearndb");  

            /** 

             * DBCollection代表集合,如果数据库中没有该集合,会默认创建一个 

             */  

            DBCollection users = db.getCollection("users");  

            /** 

             * DBObject代表文档,这是一个接口,java中提供了多种实现,最简单的就是BasicDBObject了 

             */  

            DBObject user = new BasicDBObject();  

            user.put("name", "jimmy");  

            user.put("age", "34");  

            DBObject address = new BasicDBObject();  

            address.put("city", "bj");  

            address.put("street", "bq road");  

            address.put("mail", "ufpark 68#");  

            /** 

             * 对于内嵌文档,我们需要先将内嵌文档填充后,再填充到外层文档中! 

             */  

            user.put("address", address);  

            // 将该文档插入到集合中  

            users.insert(user);  

            // 从集合中查询数据,我们就查询一条,调用findOne即可  

            DBObject dbUser = users.findOne();  

            System.out.println("name" + " : "  + dbUser.get("name") );  

            System.out.println("age" + " : "  + dbUser.get("age") );  

            DBObject dbAddress = (DBObject)user.get("address");  

            System.out.println("city" + " : "  + dbAddress.get("city") );  

            System.out.println("street" + " : "  + dbAddress.get("street") );  

            System.out.println("mail" + " : "  + dbAddress.get("mail") );  

              

        }  

      

    }  

 

输出结果为:

    name : jimmy  

    age : 34  

    city : bj  

    street : bq road  

    mail : ufpark 68#  

从上述例子,我们可以看出,利用Java驱动操作MongoDB和shell中操作方式是十分相似的。

我们这里稍微提一下上面注释中,解释的文档类。Java驱动中文档必须是DBObject接口类型,这个接口可以认为是一个有序地java.util.Map。Java驱动中有提供了很多实现,我们上例中采用了最简单的BasicDBObject。

【向集合中保存数组】

MongoDB集合中的键值对的值支持数组,在shell中,我们通过[],来表示数组,那Java驱动中如何表示数组呢?在Java驱动中,java.util.List类型的对象,都可以表示MongoDB中的数组!我们看一个例子:

 

 1     package cn.test;  

 2       

 3     import java.net.UnknownHostException;  

 4     import java.util.ArrayList;  

 5     import java.util.List;  

 6       

 7     import com.mongodb.BasicDBObject;  

 8     import com.mongodb.BasicDBObjectBuilder;  

 9     import com.mongodb.DB;  

10     import com.mongodb.DBCollection;  

11     import com.mongodb.DBObject;  

12     import com.mongodb.Mongo;  

13       

14     public class Test1 {  

15       

16         public static void main(String[] args) throws UnknownHostException {  

17               

18             /** 

19              * Mongo类代表与MongoDB服务器的连接,有多种构造函数。无参构造函数默认连接localhost:27017. 

20              */  

21             Mongo connection = new Mongo("localhost:20000");  

22             /** 

23              * DB类代表数据库,如果当前服务器上没有该数据库,会默认创建一个 

24              */  

25             DB db = connection.getDB("mylearndb");  

26             /** 

27              * DBCollection代表集合,如果数据库中没有该集合,会默认创建一个 

28              */  

29             DBCollection fruitShop = db.getCollection("fruitshop");  

30             /** 

31              *  创建水果店文档对象 

32              */  

33             DBObject shop1 = new BasicDBObject();  

34             shop1.put("name", "The Fruit King");  

35             /** 

36              *  水果店内水果保存在一个内嵌文档的数组中,格式为: 

37              *  [{"name" : "apple", "quality" : "good", "price" : "5.6"},  

38              *   {"name" : "orange", "quality" : "normal", "price" : "1.5"}, 

39              *   ......] 

40              */  

41             // 数组通过List表示  

42             List<DBObject> fruits = new ArrayList<DBObject>();  

43             // 数组中的每一个文档,我们通过BasicDBObjectBuilder来构造  

44             fruits.add(BasicDBObjectBuilder.start().add("name", "apple").add("quality", "good").add("price", "5.6").get());  

45             fruits.add(BasicDBObjectBuilder.start().add("name", "orange").add("quality", "normal").add("price", "1.5").get());  

46             shop1.put("fruits", fruits);  

47               

48             fruitShop.insert(shop1);  

49               

50         }  

51       

52     }  

 

我们通过Shell连接到数据库上,直观地看看数据库中集合内的数据:

1     > use mylearndb;  

2     switched to db mylearndb  

3     > db.fruitshop.find();  

4     { "_id" : ObjectId("504c26fed9005e6e410c5979"), "name" : "The Fruit King", "frui  

5     ts" : [         {       "name" : "apple",       "quality" : "good",     "price"  

6     : "5.6" },      {       "name" : "orange",      "quality" : "normal",   "price"  

7     : "1.5" } ] }  

8     >  

以上就是利用Java驱动操作MongoDB的一个简单示例,使用Java驱动操作MongoDB很简单,大家实际使用中对于API可以参照MongoDB提供的官方文档。

下面的链接就是2.9.0版驱动对应的API文档:

http://api.mongodb.org/java/2.9.0/

 

你可能感兴趣的:(mongodb)