zoukankan      html  css  js  c++  java
  • java 连接 mongodb 及使用

    MongoDB是当今非常流行的一款NoSQL数据库,本文介绍如何使用MongoDB的Java驱动来操作MongoDB。

    一、引入MongoDB Java Driver包


    如果需要操作MongoDB的Java项目是一个Maven项目,可以在依赖中加上以下的配置。

    <dependencies>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>2.13.2</version>
        </dependency>
    </dependencies>

    或者通过直接下载jar包的方式使用,下载地址:mongo-java-driver-2.13.2.jar。

    详细的如何引入MongoDB jar包的方法可以参考官方文档。

    二、连接MongoDB


    可以使用MongoClient来连接MongoDB,MongoClient的使用方式如下:

    MongoClient mongoClient = new MongoClient("localhost", 27017);
    DB db = mongoClient.getDB("mydb");

    上面的代码连接了localhost:27017上MongoDB服务,并指定使用mydb数据库。连接后便可以对这个数据库作进一步的操作。

    需要指出的是,MongoClient是线程安全的,可以在多程程环境中共享同一个MongoClient。通常来说,一个应用程序中,只需要生成一个全局的MongoClient实例,然后在程序的其他地方使用这个实例即可。

    三、认证


    可以使用多种方式对连接进行认证,下面介绍两种方式。

    1. 方式一:MongoCredential

    MongoCredential类的createCredential方法可以指定认证的用户名,密码,以及使用的数据库,并返回一个MongoCredential对象。其方法的声明如下:

    static MongoCredential createCredential(
    String userName, String database, char[] password)

    例如

    MongoCredential credential = MongoCredential.createCredential(
    "user", "mydb", "password".toCharArray());

    上面创建了一个用户名为user,密码为password,数据库为mydb的MongoCredential对象。

    将生成MongoCredential的对象作为MongoClient构造函数的参数。由于MongoClient构造函数的为List<MongoCredential>类型,所以需要先构造成一个List再传递。

    完整的认证的例子如下:

    MongoCredential credential = MongoCredential.createCredential(
    "user", "mydb", "password".toCharArray());
    ServerAddress serverAddress = new ServerAddress("localhost", 27017); MongoClient mongoClient = new MongoClient(serverAddress, Arrays.asList(credential)); DB db = mongoClient.getDB("mydb");

     

    2. 方式二:MongoClientURI

    亦可以使用MongoClientURI完成MongoDB的认证,它代表了一个URI对象。MongoClientURI的构造函数接受一个String类型的字符串,这个字符串的格式如下:

    mongodb://[username:password@]
    host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]]

    生成的MongoClientURI对象作为MongoClient构造函数的参数,完整的认证例子如下:

    String sURI = String.format(
    "mongodb://%s:%s@%s:%d/%s", "user", "password", "localhost", 27017, "mydb");
    MongoClientURI uri = new MongoClientURI(sURI); MongoClient mongoClient = new MongoClient(uri); DB db = mongoClient.getDB("mydb");

     

    四、获取一个集合


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

    然后可以对指定的集合进行操作,例如,插入,删除,查找,更新文档等。

     

    五、插入文档


    例如,一个文档以Json来表示如下,

    { “name”: “mongo”, “info”: { “ver”: “3.0” } }

    现在需要插入到集合mycol中。为了插入到集合中,可以使用BasicDBObject构造一个文档。

    BasicDBObject doc = new BasicDBObject("name", "mongo").append(
    "info", new BasicDBObject("ver", "3.0"));
    coll.insert(doc);

     

    六、查找文档


    1. 通过findOne查找一个符合条件文档

    通过findOne可以查找一个符合条件的文档。例如,对于上面的mycol集合,执行以下命令:

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

    将输出mycol集合中的第一个文档。也可以通过指定findOne的查找参数,来查找符合查找条件的一个文档。

    2. 通过find查找所有符合条件的文档

    find用来查找符合条件的文档,它返回一个DBCursor对象,通过遍历DBCursor对象,可以获得所有符合查找条件的文档。


    为了说明和测试,我们先插入一批以下格式的文档

    { “i”: value }
    for (int i=0; i < 100; i++) {
        coll.insert(new BasicDBObject("i", i));
    }

    find的使用示例如下:

    DBCursor cursor = coll.find();
    try {
       while(cursor.hasNext()) {
           System.out.println(cursor.next());
       }
    } finally {
       cursor.close();
    }

    会输出mycol集合中所有的文档。

    也可以指定查找的条件,例如:

    BasicDBObject query = new BasicDBObject("i", 71);
    
    DBCursor cursor = coll.find(query);
    
    try {
       while(cursor.hasNext()) {
           System.out.println(cursor.next());
       }
    } finally {
       cursor.close();
    }

    对于查找条件中包括$操作符的情形,例如以下一条mongo shell命令:

    db.coll.find({i: {$gte: 50}});

    可以使用DBObject生成查找条件,

    // find all where i >= 50
    BasicDBObject query = new BasicDBObject("i", new BasicDBObject("$gte", 50));
    
    DBCursor cursor = coll.find(query);
    try {
        while (cursor.hasNext()) {
            System.out.println(cursor.next());
        }
    } finally {
        cursor.close();
    }

     

    七、更新文档


    BasicDBObject query = new BasicDBObject("i", 70);
    BasicDBObject up = new BasicDBObject("$set", new BasicDBObject("i", 100));
    coll.update(query, up);

    上面的语句将i为70的文档更新i的值等于100。

    与我们常用的更新文档的mongo语句一样,DBCollection还包含了save,findAndModify等更新文档的方法,其使用方法在此不再赘述,可以参考API说明文档即可。

    八、删除文档


    可以通过生成一个DBObject对象来删除指定的文档,例如:

    BasicDBObject query = new BasicDBObject("i", 71);
    coll.remove(query);

    上面的语句删除i为71的文档。

    九、参考资料


    • http://mongodb.github.io/mongo-java-driver/2.13/getting-started/installation-guide/

    • http://mongodb.github.io/mongo-java-driver/2.13/getting-started/quick-tour/

    • https://github.com/mongodb/mongo-java-driver/blob/2.13.x/src/examples/example/QuickTour.java

    • http://mongodb.github.io/mongo-java-driver/3.0/driver/reference/connecting/authenticating/

    • http://api.mongodb.org/java/3.0/?com/mongodb/MongoClientURI.html

    • http://api.mongodb.org/java/2.13/

    文章地址:http://blog.csdn.net/lihao21/article/details/46939269

  • 相关阅读:
    LeetCode 623. Add One Row to Tree
    LeetCode 894. All Possible Full Binary Trees
    LeetCode 988. Smallest String Starting From Leaf
    LeetCode 979. Distribute Coins in Binary Tree
    LeetCode 814. Binary Tree Pruning
    LeetCode 951. Flip Equivalent Binary Trees
    LeetCode 426. Convert Binary Search Tree to Sorted Doubly Linked List
    LeetCode 889. Construct Binary Tree from Preorder and Postorder Traversal
    LeetCode 687. Longest Univalue Path
    LeetCode 428. Serialize and Deserialize N-ary Tree
  • 原文地址:https://www.cnblogs.com/ooo0/p/11362933.html
Copyright © 2011-2022 走看看