自行切换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