mongo-java-driver java操作mongodb

本文详细介绍了如何使用Java操作MongoDB数据库,包括连接数据库、查询、插入、更新、删除文档等基本操作,以及聚合框架的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自行切换mongo 版本查看

http://mongodb.github.io/mongo-java-driver/3.4/driver/tutorials/

http://mongodb.github.io/mongo-java-driver/4.0/driver/tutorials/connect-to-mongodb/

 

https://blog.youkuaiyun.com/com_it/article/details/84673002

 

1、创建maven项目,并添加java驱动,使用的是3.9API版本

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

 

2. 操作mongo-连接
 


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.bson.Document;
import org.junit.Before;
import org.junit.Test;
import com.mongodb.Block;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Updates;
import com.mongodb.client.result.UpdateResult;
import static com.mongodb.client.model.Filters.*;//手动导入


public class Demo {
 
	
	public  void init(){
        private MongoClient mongoClient=null;
	    private MongoDatabase database=null;
	    private MongoCollection<Document> collection=null;


		//1、创建MongoClient客户端对象
		 mongoClient = MongoClients.create("mongodb://user1:pwd1@192.168.32.135:27017");
		//2、得到数据库对象,如果mydb不存在,则创建一个
		 database = mongoClient.getDatabase("mydb");
		//3、访问集合,如果test集合不存在,则创建
		 collection = database.getCollection("test");
        //Get A List of Collections
        for (String name : database.listCollectionNames()) {
            System.out.println(name);
        }
        //Drop a Collection
        collection.drop()   
	}

    

}

 

3. mongo操作- 查询 
 

//查询数据
	@SuppressWarnings("deprecation")
	@Test
	public void query(){
		//1、查询test集合中的第一个文档
		Document myDoc = collection.find().first();
		System.out.println(myDoc.toJson());
		
		//2、查询test集合中的所有文档
		MongoCursor<Document> cursor = collection.find().iterator();
		try {
		    while (cursor.hasNext()) {
		        System.out.println(cursor.next().toJson());
		    }
		} finally {
		    cursor.close();
		}
		/**避免使用for循环,因为如果循环提前终止,应用程序可能会泄漏游标
		 * for (Document cur : collection.find()) {
    			System.out.println(cur.toJson());
			}
		 */
		//3、获取与过滤条件匹配的单个文档
		myDoc = collection.find(eq("i", 5)).first();//查询字段为5的第一个文档
		System.out.println(myDoc.toJson());
		//4、获取与过滤条件匹配的所有文档
		Block<Document>  printBlock=new Block<Document>(){
			public void apply(Document document) {
				System.out.println(document.toJson());
			}
		};
		collection.find(gt("i", 6)).forEach(printBlock);
		mongoClient.close();

        
        //5
        collection.find(
    new Document("stars", new Document("$gte", 2)
          .append("$lt", 5))
          .append("categories", "Bakery")).forEach(printBlock);
        // 6
        collection.find(and(gte("stars", 2), lt("stars", 5), eq("categories", "Bakery")))
            .forEach(printBlock);
        //7 Projections
        collection.find(and(gte("stars", 2), lt("stars", 5), eq("categories", "Bakery")))
                .projection(new Document("name", 1)
                     .append("stars", 1)
                     .append("categories",1)
                     .append("_id", 0))
                .forEach(printBlock);

        // 8 
        collection.find(and(gte("stars", 2), lt("stars", 5), eq("categories", "Bakery")))
                .projection(fields(include("name", "stars", "categories"), excludeId()))
                .forEach(printBlock);
        //9 Sorts
        collection.find(and(gte("stars", 2), lt("stars", 5), eq("categories", "Bakery")))
                .sort(Sorts.ascending("name"))
                .forEach(printBlock);
        //10  Sort with Projections
        collection.find(and(gte("stars", 2), lt("stars", 5), eq("categories", "Bakery")))
                .sort(Sorts.ascending("name"))
                .projection(fields(include("name", "stars", "categories"), excludeId()))
                .forEach(printBlock);

        //11 BasicDBObject document
        String  queryCond = “{stars:{$gt:2}}”
        String  sortStr = "{name:1}"
        String projectionStr = "{name:1,stars:1,categories:1}"
        collection.find(BasicDBObject.parse(queryCond))
                    .sort(BasicDBObject.parse(sortStr))
                    .projection(BasicDBObject.parse(projectionStr))
                    .forEach(printBlock);;

        //12翻页
         collection.find(BasicDBObject.parse(queryCond))
                    .sort(BasicDBObject.parse(sortStr))
                    .projection(BasicDBObject.parse(projectionStr))
                    .skip(10).limit(20)
        
	}

 

4. mongo  -插入insert

//插入数据
	@Test
	public void insert(){
		//1、插入单条文档
		Document doc = new Document("name", "MongoDB")
        .append("type", "database")
        .append("count", 1)
        .append("versions", Arrays.asList("v3.2", "v3.0", "v2.6"))
        .append("info", new Document("x", 203).append("y", 102));
		collection.insertOne(doc);
		
		//2、插入多条文档
		List<Document> documents = new ArrayList<Document>();
		for (int i = 0; i < 10; i++) {
		    documents.add(new Document("i", i));
		}
		collection.insertMany(documents);
		System.out.println("test集合中的文档数:"+collection.countDocuments());

        //3 BasicDBObject document
        String insertStr="{\"name\":\"11\",\"age\":12}";
        collection.insertOne(BasicDBObject.parse(insertStr));  
		mongoClient.close();
          
	}
	

 

5. mongo - 更新 update

	//更新数据
	@Test
	public void update(){
		//1、更新单条文档
		collection.updateOne(eq("i", 8), new Document("$set", new Document("i", 888)));
		 //2、更新多条文档
		//对于小于100的所有文档,将值增加100
		 UpdateResult updateResult = collection.updateMany(lt("i", 100), Updates.inc("i", 100));
		 System.out.println(updateResult.getModifiedCount());
        
        //3 更新单条文档,多个字段,lastModified field to the current date. If the lastModified field does not exist, the operator adds the field to the document.  

        collection.updateOne(
                eq("_id", new ObjectId("57506d62f57802807471dd41")),
                combine(set("stars", 1), set("contact.phone", "228-555-9999"),         
        currentDate("lastModified")));
        
        //4 更新多条文档
        collection.updateMany(
              eq("stars", 2),
              combine(set("stars", 0), currentDate("lastModified")));
        
        //5 UpdateOptions  更新一条文档, 不存在就插入 ,bypassDocumentValidation可以不使用。在副本集链接会报错,所以建议bypassDocumentValidation不要加
        collection.updateOne(
                eq("_id", 1),
                combine(set("name", "Fresh Breads and Tulips"), currentDate("lastModified")),
                new UpdateOptions().upsert(true).bypassDocumentValidation(true));
        
        // 6 替换整个文档, update只是更新对于字段,其他字段还保留原来的, replace是将docment替换掉
        collection.replaceOne(
                eq("name", "Orange Patisserie and Gelateria"),
                new Document("stars", 5)
                        .append("contact", "TBD")
                        .append("categories", Arrays.asList("Cafe", "Pastries", "Ice Cream")),
                new UpdateOptions().upsert(true).bypassDocumentValidation(true));

        //7 BasicDBObject 方式
        String queryStr ="{\"name\":\"Orange Patisserie and Gelateria\"}";
        String updateStr="{$set}"
        
          collection.updateMany(BasicDBObject.parse(queryStr),BasicDBObject.parse(updateStr), new UpdateOptions().upsert(true));
		 mongoClient.close();
        
	}
	
	

 

6. mongo- 删除document

//删除数据
	@Test
	public void delete(){
		//1、删除单条数据
		collection.deleteOne(eq("i", 110));
		//2、删除多条数据
		collection.deleteMany(gte("i", 100));
        
        //3 BasicDBObject 
        collection.deleteMany(BasicDBObject.parse("{\"i\":{$gte:100}}"));	
	
		mongoClient.close();
	}

 

7.mongo -aggregate

 Block<Document> printBlock = new Block<Document>() {
        @Override
        public void apply(final Document document) {
            System.out.println(document.toJson());
        }
    };

//1 
collection.aggregate(
  Arrays.asList(
          Aggregates.match(Filters.eq("categories", "Bakery")),
          Aggregates.group("$stars", Accumulators.sum("count", 1))
  )
).forEach(printBlock);


mongodb count Aggregates 导致不正确的数: https://blog.youkuaiyun.com/zhuchunyan_aijia/article/details/82347608

 

 

 遇到报错:

[MongoDB] java.lang.NoSuchMethodError: com.mongodb.MongoClient

问题描述:

按我之前的经验来说NoSuchMethodError一般代表着没有对应jar包,只需要导入即可。但是这回不是,lib里有jar了,因为至少在idea里代码提试时能看到,说明导入成功了。

 

网上查阅后发现有可能是pom文件加了两个同样的但是版本不同的jar包

 spring-boot-starter-data-mongodb 应该是整合了一些jar包,省的一个一个添加了,其中很有可能就包括了mongo-java-driver

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值