Mongodb java 例子

该文档是翻译自文档[mongodb-docs-2010-10-24.pdf]的[Java Language Center]章节,根据自己的理解整理而成。 


希望能给像我这样开始接触的朋友一点帮助,同时也做个备忘,因为是刚刚学习,其中的很多功能目前都用不上,以后万一有什么功能不太清楚,也可以直接查阅该文档了。 

   MongoDB Java Driver 简单操作 

一、Java驱动一致性 



MongoDB的Java驱动是线程安全的,对于一般的应用,只要一个Mongo实例即可,Mongo有个内置的连接池(池大小默认为10个)。 

对于有大量写和读的环境中,为了确保在一个Session中使用同一个DB时,我们可以用以下方式保证一致性: 

Java代码   收藏代码
  1. DB mdb = mongo.getDB('dbname');   
  2.   
  3. mdb.requestStart();   
  4. //   
  5. // 业务代码   
  6. //   
  7. mdb.requestDone();   


DB和DBCollection是绝对线程安全的,它们被缓存起来了,所以在应用中取到的可能是同一个对象。 



二、保存/查找对象(DBObject) 



Java驱动提供了DBObject接口,方便我们保存对象到数据库中。 

定义需要保存的对象: 

public class Tweet implements DBObject { 
  /** ...... */ 


然后我们可以使用该对象: 

Java代码   收藏代码
  1. Tweet tweet = new Tweet();   
  2. tweet.put("user", userId);   
  3. tweet.put("message", message);   
  4. tweet.put("date"new Date());   
  5.   
  6. collection.insert(tweet);   
当从数据库中查询时,结果会自动的转换成DBObject对象,我们可以转换成我们自己的类型: 

Java代码   收藏代码
  1. collection.setObjectClass(Tweet);   
  2.   
  3. Tweet myTweet = (Tweet)collection.findOne();   

三、创建连接 



Java代码   收藏代码
  1. Mongo m = new Mongo();   
  2. Mongo m = new Mongo("localhost");   
  3. Mongo m = new Mongo("localhost"27017);   
  4.   
  5. DB db = m.getDB("mydb);   

注意:事实上,Mongo实例代表了一个数据库连接池,即使在多线程的环境中,一个Mongo实例对我们来说已经足够了。 

四、认证(可选的) 



boolean auth = db.authenticate("myUserName", "myPasswd"); 

五、取得Collection列表 


Java代码   收藏代码
  1. Set<String> colls = db.getCollectionNames();   
  2.   
  3. for(String s : colls) {   
  4.   System.out.prinln(s);   
  5. }   

六、获取一个Collection 



DBCollection coll = db.getCollection("testCollection"); 

使用DBCollection,我们可以进行插入、查询数据等数据操作。 



七、插入文档 



假设有个JSON文档如下所示: 


  "name": "MongoDB", 
  "type": "database", 
  "count": 1, 
  "info": { 
     x: 203, 
     y: 102 
    } 


注意:上面的JSON文档有个内嵌文档"info"。 

我们完全可以利用BasicDBObject来创建一个和上面的JSON一样的文档,并且把它保存在MongoDB中。 

Java代码   收藏代码
  1. DBObject doc = new BasicDBObject();   
  2.   
  3. doc.put("name""MongoDB");   
  4. doc.put("type""database");   
  5. doc.put("count"1);   
  6.   
  7. DBObject info = new BasicDBObject();   
  8. info.put("x"203);   
  9. info.put("y"102);   
  10.   
  11. doc.put("info", info);   
  12.   
  13. coll.insert(doc);   
八、查询第一个文档(findOne()) 



为了验证在上面我们保存的类似JSON的数据,我们可以用findOne()方法取得数据。 

findOne(): 返回一个文档; 
find(): 返回一个游标(DBCursor),其中包含一组对象DBObject; 

DBObject doc = coll.findOne(); 
System.out.println(doc); 

我们将会看到控制台输出: 
{ "_id" : "49902cde5162504500b45c2c" , "name" : "MongoDB" , "type" : "database" , "count" : 1 , "info" : { "x" : 203 , "y" : 102} , "_ns" : "testCollection"} 

九、插入多个文档 



为了在后来展示更多的查询方法,我们先插入几个文档,它们的JSON像这样: 

  "i": value 


使用一个循环插入数据: 

Java代码   收藏代码
  1. for(int i = 0; i < 100; i++) {   
  2.   coll.insert(new BasicDBObject().append("i", i));   
  3. }   

我们注意到,同一个coll,我们完全可以插入不同风格的数据,这就是MongoDB的重要特性“模式自由”。 

十、统计文档数 



现在我们已经有101份文档在数据库中了,现在统计一下看是否正确。 

Java代码   收藏代码
  1. long count = coll.getCount();   
  2. System.out.println(count);   
控制台将会输出:101 

十一、使用游标取得所有的文档 


Java代码   收藏代码
  1. DBCursor cursor = coll.find();   
  2.   
  3. while(cursor.hasNext()) {   
  4.   DBObject object = cursor.next();   
  5.   System.out.println(object);   
  6. }   
十二、查询单个文档 


Java代码   收藏代码
  1. DBObject query = new BasicDBObject();   
  2.   
  3. query.put("i"71);   
  4.   
  5. cursor = coll.find(query);   
  6.   
  7. while(cur.hasNext()) {   
  8.   DBObject object = cursor.next();   
  9.   System.out.println(object);   
  10. }   
控制台的输出类似如下: 

{ "_id" : "49903677516250c1008d624e" , "i" : 71 , "_ns" : "testCollection"} 

十三、查询文档集合 



根据查询条件,我们可以通过DBCollection从数据库中取出多个对象,比如查询i>50的文档集合: 

Java代码   收藏代码
  1. query = new BasicDBObject();   
  2.   
  3. query.put("i"new BasicDBObject("$gt"50)); // i>50   
  4.   
  5. cursor = coll.find(query);   
  6.   
  7. while(cursor.hasNext()) {   
  8.   DBObject object = cursor.next();   
  9.   System.out.println(object);   
  10. }   
比如查询条件为 20<i<=30: 

Java代码   收藏代码
  1. query = new BasicDBObject();   
  2.   
  3. // 20<i<=30   
  4. query.put("i"new BasicDBObject("$gt"20).append("$lte"30));   
  5.   
  6. cursor = coll.find(query);   
  7.   
  8. while(cursor.hasNext()) {   
  9.   DBObject object = cursor.next();   
  10.   System.out.println(object);   
  11. }   

十四、创建索引 



MongoDB支持索引,并且给一个DBCollection添加索引非常简单,你只要指明需要创建索引的字段,然后指明其是升序(1)还是降序(-1)即可,比如在"i"上创建升序索引。 

coll.createIndex(new BasicDBObject("i", 1)); // 1代表升序 

十五、查询索引 



我们可以查询到所有的索引: 

Java代码   收藏代码
  1. List<DBObject> list = coll.getIndexInfo();   
  2.   
  3. for(DBObject index : list){   
  4.   System.out.println(index);   
  5. }   
控制台的输出类似如下所示: 

{ "name" : "i_1" , "ns" : "mydb.testCollection" , "key" : { "i" : 1} , "_ns" : "system.indexes"} 




   MongoDB的管理功能 
   
一、获取所有的数据库 


Java代码   收藏代码
  1. Mongo m = new Mongo();   
  2.   
  3. for(String s : m.getDatabaseNames()) {   
  4.   System.out.println(s);   
  5. }   


二、删除数据库 



m.dropDatabase("my_new_db"); 


   MongoDB的Java类型 



一、对象ID 



ObjectId被用作自动生成的唯一ID. 

Java代码   收藏代码
  1. ObjectId id = new ObjectId();   
  2. ObjectId copy = new ObjectId(id);   
二、正则表达式 



Java代码   收藏代码
  1. Pattern john = Pattern.compile("joh?n", CASE_INSENSITIVE);   
  2. DBObject query = new BasicDBObject("name", john);   

// 查询所有 "name" 匹配 /joh?n/i 的文档 
DBCursor cursor = collection.find(query); 



三、日期和时间 



Java代码   收藏代码
  1. Date now = new Date();   
  2. DBObject time = new BasicDBObject("ts", now);   
  3.   
  4. collection.save(time);   

四、数据库引用 



DBRef可以用来保存数据库引用。 

Java代码   收藏代码
  1. DBRef addressRef = new DBRef(db, "foo.bar", address_id);   
  2. DBObject address = addressRef.fetch();   
  3.   
  4. DBObject person = BasicDBObjectBuilder.start()   
  5.   .add("name""Fred")   
  6.   .add("address", addressRef)   
  7.   .get();   
  8. collection.save(person);   
  9.   
  10. DBObject fred = collection.findOne();   
  11. DBRef addressObj = (DBRef)fred.get("address");   
  12. addressObj.fetch();   

五、二进制数据 



字节数组(byte[])被当作二进制数据。 

六、内嵌文档 



JSON样式的数据如下: 

  "x": { 
   "y": 3 
  } 


则在MongoDB中,Java表示为: 

Java代码   收藏代码
  1. DBObject y = new BasicDBObject("y"3);   
  2. DBObject x = new BasicDBObject("x", y);   
七、数组 



任何继承自List的对象,在MongoDB中,都被当成是数组。 

如果想表示如下JSON数据: 

Java代码   收藏代码
  1. {   
  2.   "x": [   
  3.    1,   
  4.    2,   
  5.    {"foo""bar"},   
  6.    4   
  7.   ]   
  8. }   

则在Java中,应该为: 

Java代码   收藏代码
  1. List<Object> x = new ArrayList<Object>();   
  2. x.add(1);   
  3. x.add(2);   
  4. x.add(new BasicDBObject("foo""bar"));   
  5. x.add(4);   
  6.   
  7. DBObject doc = new BasicDBObject("x", x);   
  8. System.out.println(doc);   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值