package com.ljl.spring.boot.controller;
import com.mongodb.*;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import static com.mongodb.client.model.Filters.*;
/**
* mongoDB
* MongoDB 增删改查 操作,包含批量操作
*
* @author
* @create 2017-12-21 17:28
**/
@RestController
public class TestMongoDB {
private static final String HOST = "127.0.0.1";
private static final int PORT = 27017;
private static final String DB_NAME = "admin";
private static MongoDatabase db;
private static DB db2;
static {
// 连接到 mongodb 服务
MongoClient mongoClient = new MongoClient(HOST, PORT);
// 连接到数据库
db = mongoClient.getDatabase(DB_NAME);
}
public static void MongoDBJDBC02() {
try {
// 连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址
// ServerAddress()两个参数分别为 服务器地址 和 端口
ServerAddress serverAddress = new ServerAddress("localhost", 27017);
List<ServerAddress> addrs = new ArrayList<ServerAddress>();
addrs.add(serverAddress);
//三个参数分别为 用户名 数据库名称 密码
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());
}
}
//集合创建,插入文档
//我们可以使用 com.mongodb.client.MongoDatabase 类中的createCollection()来创建集合
public static void createCollection() {
try {
System.out.println("Connect to database successfully");
db.createCollection("user");
System.out.println("集合创建成功");
// 获取集合
// 我们可以使用com.mongodb.client.MongoDatabase类的 getCollection() 方法来获取一个集合
MongoCollection<Document> collection = db.getCollection("user");
System.out.println("集合 test 选择成功");
//插入文档
//1. 创建文档 org.bson.Document 参数为key-value的格式
//2. 创建文档集合List<Document>
//3. 将文档集合插入数据库集合中 mongoCollection.insertMany(List<Document>)
//插入单个文档可以用 mongoCollection.insertOne(Document)
Document document = new Document("title", "MongoDB").
append("description", "database").
append("likes", 300).
append("by", "Fly");
List<Document> documents = new ArrayList<Document>();
documents.add(document);
collection.insertMany(documents);
System.out.println("文档插入成功");
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
}
}
//> show collections
// persons
// user
//> db.user.find()
// { "_id" : ObjectId("5a3b858e7be9783afccde496"), "title" : "MongoDB", "description" : "database", "likes" : 100, "by" : "Fly" }
//插入文档
//我们可以使用 com.mongodb.client.MongoDatabase 类中的createCollection()来创建集合
public static void insertCollection() {
try {
// 获取集合
// 我们可以使用com.mongodb.client.MongoDatabase类的 getCollection() 方法来获取一个集合
MongoCollection<Document> collection = db.getCollection("user");
System.out.println("集合 test 选择成功");
//插入文档
//1. 创建文档 org.bson.Document 参数为key-value的格式
//2. 创建文档集合List<Document>
//3. 将文档集合插入数据库集合中 mongoCollection.insertMany(List<Document>)
//插入单个文档可以用 mongoCollection.insertOne(Document)
Document document = new Document("title", "MongoDB").
append("description", "database").
append("likes", 300).
append("by", "Fly");
List<Document> documents = new ArrayList<Document>();
documents.add(document);
collection.insertMany(documents);
System.out.println("文档插入成功");
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
}
}
//更新单个文档,请使用updateOne
public static void updateOneDoc() {
MongoCollection<Document> collection = db.getCollection("user");
UpdateResult updateResult = collection.updateOne(eq("name", "alen"), new Document("$set", new Document("age", 110)));
System.out.println(updateResult.getModifiedCount());
}
/*更新全部文档
你可以使用 com.mongodb.client.MongoCollection 类中的 updateMany() 方法来更新集合中的文档。
*/
public static void updateDoc() {
try {
MongoCollection<Document> collection = db.getCollection("user");
System.out.println("集合 test 选择成功");
//更新文档 将文档中likes=100的文档修改为likes=200
UpdateResult updateResult = collection.updateMany(eq("likes", 100), new Document("$set", new Document("likes", 200)));
System.out.println(updateResult.getModifiedCount());
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
}
}
//删除第一个文档
// 要删除集合中的第一个文档,首先你需要使用com.mongodb.DBCollection类中的 findOne()方法来获取第一个文档,
//然后使用remove 方法删除。
public static void deleteDoc() {
try {
MongoCollection<Document> collection = db.getCollection("user");
System.out.println("集合 test 选择成功");
// 删除符合条件的第一个文档
DeleteResult deleteResultOne = collection.deleteOne(eq("likes", 200));
System.out.println(deleteResultOne.getDeletedCount());
//删除所有符合条件的文档
DeleteResult deleteResultMany = collection.deleteMany(eq("likes", 200));
// 检索查看结果
System.out.println(deleteResultMany.getDeletedCount());
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
}
}
//查询集合 第一个文档
public static void queryFirstDoc() {
MongoCollection<Document> collection = db.getCollection("user");
//first() 返回第一个文档
Document myDoc = collection.find().first();
System.out.println(myDoc.toJson());
}
//查询集合 返回全部文档通过iterator()
public static void queryAllDoc() {
MongoCollection<Document> collection = db.getCollection("user");
//文档的总数
System.out.println(collection.count());
//iterator() 返回第一个文档
MongoCursor<Document> cursor = collection.find().iterator();
try {
while (cursor.hasNext()) {
System.out.println(cursor.next().toJson());
}
} finally {
cursor.close();
}
}
//虽然下面的迭代习惯是允许的,
//但是避免使用它,因为如果循环提前终止,
//应用程序可能会泄漏一个游标:
public static void queryAllDocByFor() {
MongoCollection<Document> collection = db.getCollection("user");
//文档的总数
System.out.println(collection.count());
//iterator() 返回第一个文档
for (Document cur : collection.find()) {
System.out.println(cur.toJson());
}
}
//查询指定文档
//要查询符合特定条件的文档,请将过滤器(eq过滤器)对象传递给find()方法。 以
// 获取与过滤器匹配的单个文档
public static void queryEqDoc() {
MongoCollection<Document> collection = db.getCollection("user");
//查询 键为name 值为alen,返回第一个
Document myDoc = collection.find(eq("name", "alen")).first();
System.out.println(myDoc.toJson());
}
//该示例使用Find Iterable对象上的forEach方法将块应用于每个文档。
//要为范围指定过滤器,例如50 <i <= 100,可以使用和helper:
public static void queryConditionalDoc() {
MongoCollection<Document> collection = db.getCollection("user");
//该示例使用Find Iterable对象上的forEach方法将块应用于每个文档。
Block<Document> printBlock = new Block<Document>() {
@Override
public void apply(final Document document) {
System.out.println(document.toJson());
}
};
//查询 键为name 值为alen,返回第一个
collection.find(and(gt("age", 20), lte("age", 40))).forEach(printBlock);
}
//创建索引
// 要在一个或多个字段上创建索引,请将索引规范文档传递给createIndex()方法。
// 索引键规范文档包含索引字段和每个字段的索引类型:
// new Document(<field1>, <type1>).append(<field2>, <type2>) ...
//对于升序索引类型,为<type>指定1。
//对于降序索引类型,为<type>指定-1。
public static void createIndexes() {
MongoCollection<Document> collection = db.getCollection("user");
String res = collection.createIndex(new Document("age", 1));
System.out.println("索引名:" + res);
}
public static void main(String[] args) {
// deleteDoc();
//queryCollection();
// queryAllDocByFor();
//queryConditionalDoc();
createIndexes();
}
}
参考:
http://www.mongodb.org.cn/drivers/4.html
http://mongodb.github.io/mongo-java-driver/3.6/driver/getting-started/quick-start/
MongoDB最新Java驱动 mongodb java api
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Mongodb安装
mongodb安装教程
mongodb 配置文件