package lesson01;

import com.google.gson.Gson;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import org.bson.Document;

public class demo01_Connect_MongoDB {

public static void main(String[] args) {
CRUD crud = new CRUD();
crud.Find2();
}

static class CRUD {

public MongoCollection<Document> connect() {
// 1.连接到指定的MongoDB数据库,如果不设置host和port,则自动连接localhost:27017
MongoClient client = new MongoClient("localhost",27017);
// 2.连接到指定的数据库
MongoDatabase testDB = client.getDatabase("test");
// 3.获取指定的集合对象
MongoCollection<Document> stuColl = testDB.getCollection("students");
return stuColl;
}

public void Insert() { // 将java中的对象插入
MongoCollection<Document> stuColl = connect();
// 4.创建一个学生对象
Student stu = new Student("猪八戒", 28, "男");
// 5.将stu转换为JSON
Gson gson = new Gson();
String stuJSON = gson.toJson(stu);
// 6.将json转换为document
Document doc = Document.parse(stuJSON);
// 7.将stu对象插入到数据库中
stuColl.insertOne(doc);
}

public void Find() {
MongoCollection<Document> stuColl = connect();
// 4.查询数据库中的文档
Document doc = stuColl.find().first();
Gson gson = new Gson();
Student stu = gson.fromJson(doc.toJson(), Student.class);
System.out.println(stu);
}

public void Find2() {
MongoCollection<Document> stuColl = connect();
// 4.查询数据库中的文档
FindIterable<Document> docs = stuColl.find(Filters.eq("name", "猪八戒"));
for (Document doc : docs) {
System.out.println(doc.toJson());
}
}

public void Remove() {
MongoCollection<Document> stuColl = connect();
stuColl.deleteOne(Filters.eq("name", "猪八戒"));
}

public void updateOne() {
MongoCollection<Document> stuColl = connect();
stuColl.updateOne(Filters.eq("name", "猪八戒"), new Document("$set", new Document("age", 20)));
}

}

static class Student {
String name;
int age;
String gender;

public Student(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getGender() {
return gender;
}

public void setGender(String gender) {
this.gender = gender;
}

@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
'}';
}
}

}