【Mongo】Java操作MongoDB

Java操作MongoDB

MongoDB支持C、C++、C#、GO、Java、NodeJS、PHP、Python、Ruby、Rust、Scala和Swift语言的驱动程序,MongoDB 提供了当前所有主流开发语言的数据库驱动包,开发人员使用以上任何一种主流开发语言都可以轻松编程,实现访问MongoDB 数据库。[^3]

现在只介绍Java语言通过MongoDB驱动程序对MongoDB数据库的基本操作,mongodb-dirver-sync是MongoDB官方推出的驱动程序,这里使用的版本为4.6.1,MongoDB版本为v5.0.2,jdk版本为jdk1.8具体的数据库和驱动版本的兼容性关系参照MongoDB Compatibility

准备工作

  1. 引入maven依赖

    在项目中引入如下依赖,具体版本根据需要连接的MongoDB数据库自行确定,这里是4.6.1

<dependency>
	<groupId>org.mongodb</groupId>
	<artifactId>mongodb-driver-sync</artifactId>
    <version>4.6.1</version>
</dependency>
  1. 编辑配置文件

    配置文件的作用是用来保存MongoDB的连接信息,如ip,端口号等,在实际开发过程中对这种配置信息尽量使用配置文件,减少硬编码。配置文件内容如下:

   # 配置文件保存路径为:resource/config/mongodb.properties
   mongodb.uri.host=127.0.0.1
   mongodb.uri.port=27017
   mongodb.uri.database=MongoStudy
   mongodb.database.defaultCollection=game
  1. 建立连接后进行相关操作

    通过代码读取配置信息,建立MongoDB连接并进行相关操作,具体代码如下:

   package top.sunyog.mongo;
   
   import com.mongodb.client.*;
   import com.mongodb.client.model.Filters;
   import org.bson.Document;
   import org.bson.conversions.Bson;
   
   import java.io.*;
   import java.net.URL;
   import java.text.MessageFormat;
   import java.util.Properties;
   
   public class MongoDemoApp {
       public static void main(String[] args) {
           //读取properties配置文件
           Properties properties = new Properties();
           URL uri = MongoDemoApp.class.getClassLoader().getResource("config/mongodb.properties");
           try (InputStream in = new FileInputStream(uri.getFile());
                BufferedInputStream bin = new BufferedInputStream(in)) {
               properties.load(bin);
               String host = properties.getProperty("mongodb.uri.host");
               String port = properties.getProperty("mongodb.uri.port");
               String db = properties.getProperty("mongodb.uri.database");
               String defaultColl = properties.getProperty("mongodb.database.defaultCollection");
               
               //构建数据库url
               final String urlFormatter="mongodb://{0}:{1}";
               String conn = MessageFormat.format(urlFormatter, host, port);
               //建立连接
               MongoClient client = MongoClients.create(conn);
               //进行数据库相关操作
               //...
           } catch (FileNotFoundException e) {
               throw new RuntimeException(e);
           } catch (IOException e) {
               throw new RuntimeException(e);
           }
       }
   }

插入数据

和MongoDB shell一样,使用Java向MongoDB插入数据也有两种方法,insertOne()insertMany(),两个函数的区别在于入参,一个是Document对象,一个是List<Document>对象。主要用法如下:

import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.model.Filters;
import com.mongodb.client.result.InsertOneResult;
import org.bson.Document;
import org.bson.conversions.Bson;
import java.util.Arrays;

public class InsertDemo {
    private void insertDocument(MongoCollection coll) {
        Document doc = new Document();
        doc.append("name", "terraria").append("price", 18);
        doc.put("platform", Arrays.asList("PSX","XBOX","steam","switch"));
        InsertOneResult insertRes = coll.insertOne(doc);
    }
}

通过以下查询插入的数据:

import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.model.Filters;
import com.mongodb.client.result.InsertOneResult;
import org.bson.Document;
import org.bson.conversions.Bson;
import java.util.Arrays;

public class InsertDemo {
    private void findById(MongoCollection coll,InsertOneResult insertRes){
        Bson filter = Filters.eq("_id", insertRes.getInsertedId());
        MongoCursor cursor = coll.find(filter).iterator();
        while (cursor.hasNext()){
            System.out.println(cursor.next());
        }
    }
}

控制台打印结果如下:

Document{{_id=62c53f733ae2f874816f4a85, name=terraria, price=18, platform=[PSX, XBOX, steam, switch]}}

批量插入数据代码样例:

import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.model.Filters;
import com.mongodb.client.result.InsertManyResult;
import com.mongodb.client.result.InsertOneResult;
import org.bson.BsonValue;
import org.bson.Document;
import org.bson.conversions.Bson;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

public class InsertDemo { 
	private void insertDocuments(MongoCollection coll) {
    	//生成数据
        List<Document> documents = Arrays.asList(
                new Document().append("name", "overcooked! 2").append("price", 24),
                new Document().append("name","titan fall 2").append("price",25)
        );
    	//插入数据
        InsertManyResult insertManyResult = coll.insertMany(documents);
    	//查询数据
        for (Map.Entry<Integer, BsonValue> entry : insertManyResult.getInsertedIds().entrySet()) {
            BsonValue idVal = entry.getValue();
            coll.find(Filters.eq("_id",idVal)).forEach(o->{
                System.out.println(o);
            });
        }
    }
}

执行程序,打印出的数据结果如下:

Document{{_id=62c6395b615f8a447cb82710, name=overcooked! 2, price=24}}
Document{{_id=62c6395b615f8a447cb82711, name=titan fall 2, price=25}}

带选项的批量插入:

List<Document> documents = Arrays.asList(
        new Document().append("name", "overcooked! 2").append("price", 24),
        new Document().append("name", "pummel party").append("price", 30),
        new Document().append("name", "cup head").append("price", 47),
        new Document().append("name", "ori").append("price", 29)
	);
InsertManyOptions options = new InsertManyOptions().ordered(false);
InsertManyResult res = coll.insertMany(documents, options);

删除数据

deleteOne()方法代码样例:

package top.sunyog.mongo.delete;

import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import com.mongodb.client.result.DeleteResult;

public class DeleteDemo {
    private void deleteDocument(MongoCollection coll) {
        DeleteResult res = coll.deleteOne(Filters.eq("name", "titan fall 2"));
        System.out.println(res);
    }
}

执行结果:

AcknowledgedDeleteResult{deletedCount=1}

deleteMany()方法代码样例:

package top.sunyog.mongo.delete;

import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import com.mongodb.client.result.DeleteResult;

public class DeleteDemo {   
	private void deleteManyDocuments(MongoCollection coll) {
        Bson filter_1 = Filters.eq("name", "overcooked! 2");
        Bson filter_2 = Filters.eq("name", "terraria");
        Bson filter = Filters.or(filter_1, filter_2);
        DeleteResult res = coll.deleteMany(filter);
        long count = res.getDeletedCount();
        System.out.println("delete many function result: count="+count);
    }
}

执行结果:

delete many function result: count=2

更新数据

替换文档

replaceOne()方法用于对文档进行替换, 实例代码如下:

package top.sunyog.mongo.update;

import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;

import java.util.Arrays;

public class UpdateDemo {
    private void replaceOneDoc(MongoCollection<Document> coll) {
        Document doc = new Document().append("name", "ori").append("price", 129)
                .append("platform", Arrays.asList("switch", "steam"));
        UpdateResult res = coll.replaceOne(Filters.eq("name", "ori"), doc);
        System.out.println(res);
    }
}

测试更新结果:

> db.game.find({"name":"ori"}).pretty()
{
        "_id" : ObjectId("62c64528eb52555d87933438"),
        "name" : "ori",
        "price" : 129,
        "platform" : [
                "switch",
                "steam"
        ]
}
  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您提供一些基本的 Java 操作 MongoDB 数据库的代码示例。 首先,您需要使用 Java 驱动程序来连接 MongoDB 数据库。您可以通过 Maven 或 Gradle 将驱动程序添加为依赖项。这里是一个 Maven 的例子: ```xml <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.12.7</version> </dependency> ``` 然后,您需要创建一个 MongoClient 对象,该对象代表与 MongoDB 实例的连接。以下是创建 MongoClient 的示例代码: ```java import com.mongodb.MongoClient; import com.mongodb.MongoClientURI; public class MongoDBConnector { private MongoClient mongoClient; public MongoDBConnector() { MongoClientURI uri = new MongoClientURI("mongodb://localhost:27017"); mongoClient = new MongoClient(uri); } public MongoClient getMongoClient() { return mongoClient; } } ``` 在上面的代码中,我们创建了一个名为 MongoDBConnector 的类,它包含一个名为 mongoClient 的 MongoClient 对象。在构造函数中,我们使用 MongoClientURI 对象指定 MongoDB 实例的连接字符串,并使用该字符串创建 MongoClient 对象。最后,我们提供了一个 getMongoClient 方法,以便在其他类中访问 MongoClient 对象。 接下来,您可以使用 MongoClient 对象来获取对特定数据库的访问权限。以下是获取对名为 educoder 的数据库的访问权限的示例代码: ```java import com.mongodb.client.MongoDatabase; public class MongoDBConnector { // ... public MongoDatabase getDatabase() { return mongoClient.getDatabase("educoder"); } } ``` 在上面的代码中,我们提供了一个 getDatabase 方法,该方法返回名为 educoder 的数据库MongoDatabase 对象。您可以使用 MongoDatabase 对象来执行各种操作,例如插入、查询和更新文档。 以下是向名为 educoder 的 users 集合中插入一个文档的示例代码: ```java import org.bson.Document; import com.mongodb.client.MongoCollection; public class MongoDBConnector { // ... public void insertDocument() { MongoCollection<Document> collection = getDatabase().getCollection("users"); Document document = new Document("name", "John Doe") .append("age", 30) .append("email", "[email protected]"); collection.insertOne(document); } } ``` 在上面的代码中,我们获取了名为 users 的集合的 MongoCollection 对象,并创建了一个包含 name、age 和 email 字段的 Document 对象。最后,我们调用 insertOne 方法将文档插入集合中。 以上是一些基本的 Java 操作 MongoDB 数据库的代码示例。您可以进一步研究 MongoDB Java 驱动程序文档,以了解更多操作

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李奇技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值