文档章节

BasicDBObjectBuilder和BasicDBObject

o
 osc_y8yehimr
发布于 2019/03/20 15:45
字数 955
阅读 7
收藏 0

注:仅仅作为个人笔记所用。

转自:https://www.cnblogs.com/gaopeng527/p/4399127.html

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中的数组!我们看一个例子:

 

      package cn.test;  
        
 import java.net.UnknownHostException;  import java.util.ArrayList;  import java.util.List;   import com.mongodb.BasicDBObject;  import com.mongodb.BasicDBObjectBuilder;  import com.mongodb.DB;  import com.mongodb.DBCollection;  import com.mongodb.DBObject;  import com.mongodb.Mongo;   public class Test1 {   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 fruitShop = db.getCollection("fruitshop");  /**   * 创建水果店文档对象  */  DBObject shop1 = new BasicDBObject();  shop1.put("name", "The Fruit King");  /**   * 水果店内水果保存在一个内嵌文档的数组中,格式为:   * [{"name" : "apple", "quality" : "good", "price" : "5.6"},   * {"name" : "orange", "quality" : "normal", "price" : "1.5"},   * ......]  */  // 数组通过List表示  List<DBObject> fruits = new ArrayList<DBObject>();  // 数组中的每一个文档,我们通过BasicDBObjectBuilder来构造  fruits.add(BasicDBObjectBuilder.start().add("name", "apple").add("quality", "good").add("price", "5.6").get());  fruits.add(BasicDBObjectBuilder.start().add("name", "orange").add("quality", "normal").add("price", "1.5").get());  shop1.put("fruits", fruits);    fruitShop.insert(shop1);    }   } 

我们通过Shell连接到数据库上,直观地看看数据库中集合内的数据:
     > use mylearndb;  
     switched to db mylearndb  
 > db.fruitshop.find();  { "_id" : ObjectId("504c26fed9005e6e410c5979"), "name" : "The Fruit King", "frui  ts" : [ { "name" : "apple", "quality" : "good", "price"  : "5.6" }, { "name" : "orange", "quality" : "normal", "price"  : "1.5" } ] }  > 

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

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

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

 
 

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

github的正确搜索方式

wc_飞豆
9分钟前
7
0
交叉编译-如何编译Android平台的可执行程序

首先来看看Linux平台下如何使用gcc编译出当下平台的可执行程序。 我们先来准备一个main.c文件 #include<stdio.h>int main(){ printf("Hello Gcc!"); return 0;} 上面是...

shzwork
12分钟前
0
0
Java 获取资源文件路径

1 问题描述 通过源码运行时,一般使用如下方式读取资源文件: String str = "1.jpg"; 资源文件与源码文件放在同一目录下,或者拥有同一父级目录: String str = "a/b/1.jpg"; 这样直接编译...

氷泠
44分钟前
12
0
git 为项目设置用户名/邮箱/密码

1.找到项目所在目录下的 .git,进入.git文件夹,然后执行如下命令分别设置用户名和邮箱 git config user.name "Affandi" git config user.email "123333333@qq.com" 然后执行命令查看con......

有时很滑稽
今天
0
0
如何从int转换为String? - How do I convert from int to String?

问题: I'm working on a project where all conversions from int to String are done like this: 我正在一个项目中,所有从int到String转换都是这样完成的: int i = 5;String strI = "" ......

javail
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部