`
jzkangta
  • 浏览: 160520 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

MongoDB小例子(转)

阅读更多
原文地址:http://lanmh.iteye.com/blog/765844

    import java.net.UnknownHostException;   
    import java.util.Set;   
      
    import com.mongodb.BasicDBObject;   
    import com.mongodb.DB;   
    import com.mongodb.DBCollection;   
    import com.mongodb.DBCursor;   
    import com.mongodb.DBObject;   
    import com.mongodb.Mongo;   
    import com.mongodb.MongoException;   
      
    public class Test {   
      
        /**  
         * @author gaogao  
         * @param args  
         * @throws MongoException  
         * @throws UnknownHostException  
         */  
        public static void main(String[] args) throws UnknownHostException,   
                MongoException {   
            // TODO Auto-generated method stub   
            // 连接本地数据库   
            Mongo m = new Mongo();   
            // 创建名为new_test_db的数据库   
            DB db = m.getDB("new_test_db");   
            // 获取new_test_db中的集合(类似于获取关系数据库中的表)   
            Set<String> cols = db.getCollectionNames();   
            // 打印出new_test_db中的集合,这里应当为null   
            for (String s : cols) {   
                System.out.println(s);   
            }   
            // 创建一个叫做"new_test_col"的集合   
            DBCollection collection = db.getCollection("new_test_col");   
            // 初始化一个基本DB对象,最终插入数据库的就是这个DB对象   
            BasicDBObject obj = new BasicDBObject();   
            // 放入几个键值对   
            obj.put("from", "搞搞");   
            obj.put("to", "宝宝");   
            obj.put("subject", "狗子爱宝子");   
            //插入对象   
            collection.insert(obj);   
            //查看一条记录,findOne()=find().limit(1);   
            DBObject dbobj=collection.findOne();   
            //打印出刚才插入的数据   
            System.out.println(dbobj);   
            //现在我们来插入9条{ranking:i}的数据   
            for(int i=0;i<9;i++){   
                collection.insert(new BasicDBObject().append("ranking", i));   
            }   
            //打印集合中的数据总数,这里应当输出10   
            System.out.println(collection.getCount());   
            //下面我们来遍历集合,find()方法返回的是一个游标(cursor),这里的概念和关系数据库很相似   
            DBCursor cursor=collection.find();   
            //然后我们使用这个游标来遍历集合   
            while(cursor.hasNext()){   
                System.out.println(cursor.next());   
            }   
            //下面来看一些略复杂一点的查询技巧,第一个,简单的条件查询,查询ranking为1的记录   
            BasicDBObject query=new BasicDBObject();   
            query.put("ranking", 1);   
            cursor=collection.find(query);   
            while(cursor.hasNext()){   
                System.out.println(cursor.next());   
            }   
            //下面是更复杂的条件查询,查询ranking大于5小于9的记录   
            query=new BasicDBObject();   
            query.put("ranking", new BasicDBObject("$gt", 5).append("$lt", 9));   
            cursor=collection.find(query);   
            while(cursor.hasNext()){   
                System.out.println(cursor.next());   
            }   
            //最后删除我们的测试数据库   
            m.dropDatabase("new_test_db");   
        }   
    }  



对mongodb进行java编程  转自
http://www.kafka0102.com/2010/07/209.html

本周实验性地使用上mongodb,应用场景很简单,所以现在对mongodb了解也不是很深入。本文主要介绍mongodb的java客户端编程,这方面的内容也很简单,这里只是做个总结。不得不说,像mongodb这种介于kv和sql之间的存储,对很多的互联网应用很合适。mongodb现在的应用案例已经很多,并且社区的活跃度很高(国内也有不少人对其有很深的研究,如果有时间和精力,或许我也会投入一些对mongodb的研究),很值得期待。

言归正传,下面总结下使用Java开发mongodb应用的一些点滴。在Java中和mongodb交互的最直接的选择就是使用MongoDB Java Driver,其下载地址是:http://github.com/mongodb/mongo-java-driver/downloads。总的来说,在Java中操作mongodb的API还是很简洁,下面对其一些常见的使用做些介绍。
1、连接数据库

和mongodb建立连接的示例代码如下:

Mongo m = new Mongo("localhost",27017);
DB db = m.getDB("db_test");

尽管这里获得了表示mongodb的db_test数据库连接的对象db,但这时并没有真正和mongodb建立连接,所以即便这时数据库没起来也不会抛出异常,尽管你还是需要catch它的实例化过程。mongodb的java driver对连接做了池化处理,所以应用中只需要实例化一个Mongo对象即可,对它的操作是线程安全的,这对开发使用来说真的是很方便。
2、取得DBCollection

mongodb中的collection在Java中使用DBCollection表示(这是一个抽象类,尽管你不必需要知道),创建DBCollection实例也是一行代码,和创建DB实例一样,这个操作并不涉及真正的和数据库之间的通信。

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

要获得类似mysql中“show tables”功能,可以使用如下代码:

Set<String> colls = db.getCollectionNames();
for (String s : colls) {
    System.out.println(s);
}

3、插入文档

mongodb存储JSON格式的文档,而在Java中表示这种数据格式的最简便的类就是Map了。MongoDB Java Driver中提供的BasicDBObject就是个Map(它继承自LinkedHashMap并实现DBObject接口),它会将Map中的数据转换成BSON格式传输到mongodb。下面是插入文档的示例:

DBCollection coll = db.getCollection("collection1");
BasicDBObject doc = new BasicDBObject();
doc.put("name", "kafka0102");
doc.put("age", 28);
doc.put("time", new Date());
coll.insert(doc);

mongodb中每个插入的文档会产生个唯一标识_id。当调用coll.insert(doc);时,driver会检查其中是否有_id字段,如果没有则自动生成ObjectId实例来作为_id的值,这个ObjectId由4部分编码而成:当前时间、机器标识、进程号和自增的整数。
insert函数也支持插入文档列表:

insert(List<DBObject> list)

而提交操作也有update( DBObject q , DBObject o )、remove( DBObject o )。
4、查询文档
4.1、findOne

findOne是查询满足条件的第一条记录(不意味着数据库满足条件的只有一条记录),查询条件使用DBObject表示,示例如下:

DBCollection coll = db.getCollection("collection1");
BasicDBObject cond = new BasicDBObject();
cond.put("name", "kafka0102");
cond.put("age", 28);
DBObject ret = coll.findOne(cond);
System.out.println(ret);

返回结果是个DBObject,可以通过get(key)来取值。对于查询条件,可以通过嵌套多层来表示复杂的格式,比如:

query = new BasicDBObject();
        query.put("i", new BasicDBObject("$gt", 50));  // e.g. find all where i > 50

4.2、find

find函数是查询集合的,它返回的DBCursor是DBObject的迭代器,使用示例如下:

DBCollection coll = db.getCollection("collection1");
BasicDBObject cond = new BasicDBObject();
cond.put("i", new BasicDBObject("$gt", 20).append("$lte", 30));
DBCursor ret = coll.find(cond);
while(ret.hasNext()) {
   System.out.println(ret.next());
}

5、使用索引

创建索引语句如:coll.createIndex(new BasicDBObject(“i”, 1)); ,其中i表示要索引的字段,1表示升序(-1表示降序)。可以看到,DBObject成为java客户端通用的结构表示。查看索引使用DBCollection.getIndexInfo()函数。
6、MongoDB Java Driver的并发性

前面提到,Java MongoDB Driver使用了连接的池化处理,这个连接池默认是保持10个连接,可以通过Option进行修改,在应用中使用Mongo的一个实例即可。连接池中的每个连接使用DBPort结构表示(而不是DBCollection),并寄存于DBPortPool中,所以对DBCollection的操作并不意味着使用同一个连接。如果在应用的一次请求过程中,需要保证使用同一个连接,可以使用下面的代码片断:

DB db...;
db.requestStart();
//code....
db.requestDone();

在requestStart和requestDone之间使用的连接就不是来自于DBPortPool,而是当前线程中的ThreadLocal结构变量(MyPort中保持了DBPort成员)。
7、其他选择

尽管Java mongodb driver很不错,但就像很多人不使用JDBC而使用一些ORM框架,mongodb的java客户端也有其他的选择。
1)对POJO和DAO的支持。对于那些热衷ORM的人来说,Morphia(http://code.google.com/p/morphia/wiki/QuickStart)是个不错的选择,它通过在POJO中添加注释来实现映射,并提供对DAO的CRUD操作的支持。
2)对DSL的支持。Sculptor就是这样的东西,使用者编写中立的DSL文件,Sculptor将其翻译成代码。这通常不具有吸引力,除非是多语言的应用,能将DSL翻译成多种编程语言,否则除了增加学习成本,没什么收益。
3)对JDBC的支持。mongo-jdbc是这样的东西,但现在还是实验性质的。它或许是想亲近Java程序员,不过它显然不能完全兼容JDBC,而很多Java程序员对JDBC也并不感冒,所以它不是很值得使用。
8、参考资料

1、http://www.mongodb.org/display/DOCS/Java+Tutorial
2、http://api.mongodb.org/java/2.0/index.html

=============================== 华丽的终止符 ================================

本文作者:kafka0102,转载文章请注明来源,谢谢!!
本文链接:http://www.kafka0102.com/2010/07/209.html








分享到:
评论

相关推荐

    mongodb的小例子

    在"mongodb的小例子"中,我们可以预期这个压缩包包含了一些简单的示例代码,帮助初学者快速入门MongoDB。这些代码可能涵盖了以下关键知识点: 1. **安装与启动**:首先,你需要在本地或服务器上安装MongoDB。安装...

    mongodb例子

    在这个“mongodb例子”中,我们很可能会找到一个简单的MongoDB数据库操作示例,这对于初学者来说是极好的学习资源。 MongoDB使用JSON格式的文档来存储数据,这种格式灵活且易于理解。数据库、集合和文档是MongoDB中...

    spring mongodb很好的例子

    Spring Data MongoDB是Spring框架的一个子项目,它使得与MongoDB的交互变得简单和直观。当将Spring Data与Spring MVC结合时,可以构建出强大的Web应用。 **Spring框架** Spring框架是一个开源的Java平台,用于简化...

    spring mvc 集成mongoDB项目 例子

    这个例子展示了如何使用Spring Data MongoDB简化对MongoDB的操作,以及如何在Spring MVC中构建RESTful API。在实际开发中,你可能还需要考虑错误处理、数据验证、分页、排序等复杂功能,但这个基础的例子为你提供了...

    spring-boot操作mongodb例子

    Spring Boot 是一个由 Pivotal 团队开发的框架,旨在简化 Spring 应用程序的...通过学习这个例子,开发者可以更好地理解如何在实际项目中利用 Spring Boot 的强大功能来操作非关系型数据库,实现高效的数据存储和检索。

    spark 连接 mongodb 使用例子

    在这个例子中,`Test`目录下的测试用例可以用来验证以上代码的正确性。确保所有操作都能成功执行,并且结果符合预期。运行这些测试用例,可以帮助理解如何在实际项目中结合Spark、MongoDB、Spring和Maven进行数据...

    MongoDB之Java使用例子

    在这个“MongoDB之Java使用例子”中,我们将深入探讨如何在Java环境中操作MongoDB数据库,包括增、删、改、查(CRUD)操作以及图像数据的存储和检索。 首先,Java与MongoDB的交互主要通过MongoDB的Java驱动程序实现...

    spring-springMVC-mongodb整合例子

    这个例子中的"spring-springMVC-mongodb整合"是一个很好的学习和实践项目,可以帮助开发者深入理解这些技术的结合使用。通过这样的整合,开发者能够构建出更加灵活、适应现代互联网需求的应用程序。

    .net core mongodb例子

    .net core mongodb例子

    mongodb的小例子,增删改查,分页

    在"mongodb的小例子,增删改查,分页"这个主题中,我们将深入探讨MongoDB的基本操作,包括数据的插入(增)、查询(查)、更新(改)以及删除(删),同时还会涉及到数据分页这一重要的数据检索技术。 1. 数据插入...

    Spring-Mongodb例子

    在"Spring-Mongodb例子"这个压缩包中,可能包含了示例代码,演示了如何在Spring应用中设置MongoDB连接、定义数据模型、创建Repository接口以及执行基本的查询和保存操作。这个例子对于初学者来说,是一个很好的起点...

    使用mongodb数据库做的小例子

    公司里要用mongodb数据库存放文件,给我一个星期的时间让我研究,这是我用mongodb数据库+struts写的小例子,能够实现人员的注册,头像的上传,帖子的管理。功能简单,主要让大家看看mongodb数据库的具体使用。文档写...

    php+mongodb小型留言板

    然后,我们创建一个集合(相当于关系数据库中的表),在这个例子中可能是“messages”。集合是存储数据的地方,可以通过`selectCollection()`方法创建或选择: ```php $collection = $db-&gt;selectCollection('...

    C# 连接mongodb例子

    MongoDB是一种流行的开源、分布式文档数据库,常用于构建高性能、可扩展的应用程序。在C#中,我们可以使用MongoDB的官方驱动程序MongoDB.Driver来连接和操作MongoDB数据库。本教程将详细介绍如何使用C#连接到MongoDB...

    MongoDB C/C++开发使用案例Demo

    MongoDB是一种流行的开源...实践中,你可以根据提供的源代码例子进行学习,理解每一步的操作,并尝试自定义功能,进一步熟悉MongoDB的C++ API。在实际项目开发中,这些知识将有助于你构建高效稳定的数据存储解决方案。

    MongoDB+MVC上传例子

    在这个“MongoDB+MVC上传例子”中,我们将探讨如何结合这两者来实现文件上传功能。 首先,让我们深入了解MongoDB。MongoDB以其灵活性、高性能和易于扩展性而受到青睐。它支持JSON格式的数据存储,这使得与...

    Mongodb java

    Mongodb java 例子

    mongodb 的 小例子(curd)

    群里学习lucene的成员挺多的,一直没时间给大家做个demo、最近抽时间用lucene给大家写了个demo 可以配置采集网站的图片,包含分组统计,相同数据合并功能,主要是给群内成员来个demo 小试牛刀、临时写的,莫吐槽 ...

    springboot+mongodb例子

    里面是git地址 ,大家可以直接通过git拿来使用。大家也可以根据此来扩展。

    Mongodb数据库JAVA操作例子

    MongoDB是一种流行的开源文档型数据库,它以JSON格式存储数据,具有高性能、高可用性和可扩展性。在Java应用程序中,我们通常使用Java驱动程序来与MongoDB进行交互。本篇将详细介绍如何利用Java实现MongoDB数据库的...

Global site tag (gtag.js) - Google Analytics