开发者社区> sjf0115> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

[MongoDB]MongoDB Java 入门

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/52295020 1.
+关注继续查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/52295020

1. 驱动

Maven配置:http://mongodb.github.io/mongo-java-driver/

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver</artifactId>
    <version>3.3.0</version>
</dependency>

2. 连接数据库

连接数据库,你需要指定数据库名称,如果指定的数据库不存在,mongo会自动创建数据库。

public class Test {
    private static Logger logger = LoggerFactory.getLogger(Test.class);
    public static void main(String[] args) {
        try {
            // 连接到 mongodb 服务
            MongoClient mongoClient = new MongoClient("localhost", 27017);
            // 连接到数据库
            MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
            logger.info("Connect to database successfully");
        } catch (Exception e) {
            logger.info("连接数据库失败", e);
        }
    }
}

本实例中 Mongo 数据库无需用户名密码验证。如果你的 Mongo 需要验证用户名及密码,可以使用以下代码:

import java.util.ArrayList;  
import java.util.List;  
import com.mongodb.MongoClient;  
import com.mongodb.MongoCredential;  
import com.mongodb.ServerAddress;  
import com.mongodb.client.MongoDatabase;  
  
public class MongoDBJDBC {  
    public static void main(String[] args){  
        try {  
            //连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址  
            //ServerAddress()两个参数分别为 服务器地址 和 端口  
            ServerAddress serverAddress = new ServerAddress("localhost",27017);  
            List<ServerAddress> addrs = new ArrayList<ServerAddress>();  
            addrs.add(serverAddress);  
              
            //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码  
            MongoCredential credential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());  
            List<MongoCredential> credentials = new ArrayList<MongoCredential>();  
            credentials.add(credential);  
              
            //通过连接认证获取MongoDB连接  
            MongoClient mongoClient = new MongoClient(addrs,credentials);  
              
            //连接到数据库  
            MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");  
            System.out.println("Connect to database successfully");  
        } catch (Exception e) {  
            System.err.println( e.getClass().getName() + ": " + e.getMessage() );  
        }  
    }  
}

3. 创建集合

我们可以使用 com.mongodb.client.MongoDatabase 类中的createCollection()来创建集合

/**
 * 创建集合
 * @param collectionName
 * @param database
 */
public static void createCollection(String collectionName, MongoDatabase database){
    database.createCollection(collectionName);
}

4. 获取集合

我们可以使用com.mongodb.client.MongoDatabase类的 getCollection() 方法来获取一个集合

/**
 * 获取集合
 * @param collectionName
 * @param database
 * @return
 */
public static MongoCollection<Document> getCollection(String collectionName, MongoDatabase database){
    MongoCollection<Document> collection = database.getCollection(collectionName);
    return collection;
}

5.插入文档

我们可以使用com.mongodb.client.MongoCollection类的 insertMany() 方法来插入一个文档

/**
 * 插入文档
 * @param collectionName
 * @param database
 */
public static void insertDocument(String collectionName, MongoDatabase database){
    Document document = new Document("title", "MongoDB : The Definitive Guide").
            append("author", "Kristina Chodorow").
            append("year", "2010-9-24").
            append("price", 39.99);
    Document document2 = new Document("title", "MongoDB实战").
            append("author", "丁雪丰").
            append("year", "2012-10").
            append("price", 59.0);
    List<Document> documentList = Lists.newArrayList();
    documentList.add(document);
    documentList.add(document2);
    // 获取集合
    MongoCollection<Document> collection = getCollection(collectionName, database);
    // 插入集合中
    collection.insertMany(documentList);
}

6. 检索文档

6.1 检索所有文档

我们可以使用 com.mongodb.client.MongoCollection 类中的 find() 方法来获取集合中的所有文档。

/**
 * 检索集合中所有文档
 * @param collection
 */
public static void findAll(MongoCollection<Document> collection){
    FindIterable<Document> findIterable = collection.find();
    MongoCursor<Document> mongoCursor = findIterable.iterator();
    while(mongoCursor.hasNext()){
        logger.info("--------- document {}", mongoCursor.next());
    }
}

备注

(1) 获取迭代器FindIterable<Document>

(2) 获取游标MongoCursor<Document>

(3) 通过游标遍历检索出的文档集合

输出结果:

12:59:54.463 [main] INFO  com.sjf.open.mongodb.Test - --------- document Document{{_id=57bbd6b2521d77442c8b9055, title=MongoDB : The Definitive Guide, author=Kristina Chodorow, year=2010-9-24, price=39.99}}
12:59:54.464 [main] INFO  com.sjf.open.mongodb.Test - --------- document Document{{_id=57bbd6b2521d77442c8b9056, title=MongoDB实战, author=丁雪丰, year=2012-10, price=59.0}}

6.2 检索第一个文档

我们可以使用 com.mongodb.client.MongoCollection 类中的 find()来获取集合中的所有文档,再通过调用first()函数返回第一文档

/**
 * 检索第一个文档
 * @param collection
 */
public static void findFirst(MongoCollection<Document> collection){
    Document document = collection.find().first();
    logger.info("---------- findFirst {}", document.toString());
}

6.3 使用检索过滤器获取文档

我们可以创建一个过滤器通过find()方法来得到集合的一个document子集。例如,如果我们想要找到某个文档中“author”字段的值是"丁雪丰",我们将做以下:

/** * 使用检索过滤器获取文档 * @param collection */ public static void findByFilter(MongoCollection<Document> collection){ Iterator iterator = collection.find(Filters.eq("author","丁雪丰")).iterator(); while(iterator.hasNext()){ logger.info("--------- findByFilter {}", iterator.next()); } }

6.4 Get a Set of Documents with a Query

我们可以使用查询来从collection中得到的一个文档集合。例如,如果我们想让所有文档查找“我”> 50岁,我们可以写:

public static void findByFilter(MongoCollection<Document> collection){
    collection.find(Filters.and(Filters.gt("price",39), Filters.lt("price", 40))).forEach(printBlock);
}
    
private static Block<Document> printBlock = new Block<Document>() {
    public void apply(final Document document) {
        logger.info("-------- printBlock {}",document.toJson());
    }
};

可以注意到我们在FindIterable上使用了forEach方法。

7. 更新文档

你可以使用 com.mongodb.client.MongoCollection 类中的 updateMany() 方法来更新集合中的文档。

/**
 * 更新文档
 * @param collection
 */
public static void update(MongoCollection<Document> collection){
    //更新文档   将文档中price=59.0的文档修改为price=52.0
    collection.updateMany(Filters.eq("price", 59.0), new Document("$set",new Document("price", 52.0)));
}

8. 删除文档

删除集合中的第一个文档,首先你需要使用com.mongodb.DBCollection类中的 deleteOne()方法来删除符合条件的第一个文档,或者使用deleteMany 方法删除符合条件的全部文档。

/**
 * 删除文档
 * @param collection
 */
public static void delete(MongoCollection collection){
    //删除符合条件的第一个文档
    DeleteResult deleteResult = collection.deleteOne(Filters.eq("price", 38.99));
    logger.info("-------- delete {}", deleteResult.toString());
    //删除所有符合条件的文档
    //DeleteResult deleteResult = collection.deleteMany (Filters.eq("price", 52.0));
}

输出结果:

22:12:49.531 [main] INFO  com.sjf.open.mongodb.Test - -------- delete AcknowledgedDeleteResult{deletedCount=1}


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【MongoDB】5.MongoDB与java的简单结合
1.首先 你的清楚你的MongoDB的版本是多少  就下载对应的架包 下载地址如下: http://mongodb.github.io/mongo-java-driver/   2.新建一个项目  把架包扔进去,并Build path到你的项目下【如果用于测试,请如下 多用一个架包】   3.
1024 0
Hello MongoDB -- Java编程
环境配置:在 Java 程序中如果要使用 MongoDB,你需要确保已经安装了 Java 环境及 MongoDB JDBC 驱动。 首先你必须下载mongo jar包,下载地址:http://mongodb.github.io/mongo-java-driver/, 请确保下载最新版本。
1073 0
mongoDB在java上面的应用
1、实际应用过程中肯定不会直接通过Linux的方式来连接和使用数据库,而是通过其他驱动的方式来使用mongoDB 2、本教程只针对于Java来做操作,主要是模拟mongoDB数据库在开发过程中的应用 3、在官网下载对应的jar包,来做mongoDB的驱动支持,当然也可以利用pom.
844 0
MongoDB 之Java应用测试
不多说了,看源码 package corejava2.mongo.basic; import java.net.UnknownHostException; import org.bson.
720 0
+关注
sjf0115
Stay Hungry, Stay Foolish---我们必须用谦虚者的自觉,饥饿者的渴望的求职态度,来拥抱我们的未来。
788
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载