Java中操作MongoDB的方法
MongoDB是一个介于关系数据库和非关系数据库(nosql)之间的产品,是非关系数
据库当中功能最丰富,最像关系数据库的。
为什么学习MongoDB
MongoDB解决Mysql 的“三高”问题:
1.对数据库高并发写入需求
2.对海量数据高效率存储访问需求
3.对数据库高扩展和高可用的需求
MongoDB 实际应用:
1.社交场景,比如朋友圈,附近的人的地点的存储
2.游戏场景,比如用户当前装备,得分等
3.物流场景,比如快递的位置,状态,途径
4.视频场景,比如直播中的点赞数和互动留言等
直入主题,我们来了解一下java操作MongoDB的方法
在链接数据库时和MySql的操作很相似
1.导入驱动包
2.获取链接对象
MongoClient mongoClient = new MongoClient("localhost",27017);
3.关闭连接
mongoClient.close();
如果数据库不存在,则创建数据库,否则切换到指定数据库。
在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档
(记录),集合才会真正创建。
MongoDB数据类型
查看库,查看集合
1.查看链接的MongoDB中的所有的库
MongoIterable<String> deslist = mongoClient.listDtabaseNames();
for(String db : dblist){
System.out.prinln(db);
}
2.使用库查看库中集合
MongoDatabase bbsDB = mongoClient.getDatabase("bbs");
MongoIterable<String> collist =bbsDB.listDtabaseNames();
for(String s : collist){
System.out.prinln(db);
}
插入数据
public static void main(String[] args) {
// 数据
Student s = new Student();
s.setBirthday(new Date());
s.setClassid(100);
s.setSid(1);
s.setSname("张三");
s.setSsex("男");
// Mongo操作
// 获取Mongo的链接对象
MongoClient mc = new MongoClient("localhost", 27017);
// 获取库对象
MongoDatabase db = mc.getDatabase("myschool");
// 获取表对象
MongoCollection<Document> table = db.getCollection("student");
// 创建一个document对象
Document doc = new Document();
doc.put("sid", s.getSid());
doc.put("sname", s.getSname());
doc.put("birthday", s.getBirthday());
doc.put("ssex", s.getSsex());
doc.put("classid", s.getClassid());
// 插入数据
table.insertOne(doc);
// 释放资源
mc.close();
}
删除数据
public static void main(String[] args) {
// Mongo操作
// 获取Mongo的链接对象
MongoClient mc = new MongoClient("localhost", 27017);
// 获取库对象
MongoDatabase db = mc.getDatabase("myschool");
// 获取表对象
MongoCollection<Document> table = db.getCollection("student");
Bson eq = Filters.eq("sname", "哈哈");
DeleteResult deleteMany = table.deleteMany(eq);
System.out.println(deleteMany.getDeletedCount());
if(deleteMany.getDeletedCount() > 0) {
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
mc.close();
}
修改数据
Filters
该过滤器类为所有的MongoDB的查询操作静态工厂方法。每个方法返回BSON类型,又可以传递给期
望一个查询过滤器的任何方法的一个实例。
eq:匹配等于指定值的值。
gt:匹配大于指定值的值。
gte:匹配大于或等于指定值的值。
lt:匹配小于规定值的值。
lte:匹配是小于或等于规定值的值。
ne:匹配不等于指定值的所有值。
in:匹配任何在数组中指定的值。
nin:没有匹配数组中的规定值。
public static void main(String[] args) {
// Mongo操作
// 获取Mongo的链接对象
MongoClient mc = new MongoClient("localhost", 27017);
// 获取库对象
MongoDatabase db = mc.getDatabase("myschool");
// 获取表对象
MongoCollection<Document> table = db.getCollection("student");
// 条件对象 where ssex = 男 and (classid = 1 or classid = 2)
Bson eq = Filters.and(
Filters.eq("ssex", "男"),
Filters.or(
Filters.eq("classid", 1),
Filters.eq("classid", 2)
)
);
// 要修改的数据
Document doc = new Document();
doc.put("$set", new Document("sname","哈哈"));
// UpdateResult updateOne = table.updateOne(eq, doc);
UpdateResult updateMany = table.updateMany(eq, doc);
System.out.println(updateMany);
mc.close();
}
查询数据
全查:
public static void main(String[] args) {
// 获取Mongo的链接对象
MongoClient mc = new MongoClient("localhost", 27017);
// 获取库对象
MongoDatabase db = mc.getDatabase("myschool");
// 获取表对象
MongoCollection<Document> table = db.getCollection("student");
FindIterable<Document> find = table.find();
for(Document doc : find) {
System.out.println(doc);
}
mc.close();
}
条件查询:
public static void main(String[] args) {
// 获取Mongo的链接对象
MongoClient mc = new MongoClient("localhost", 27017);
// 获取库对象
MongoDatabase db = mc.getDatabase("myschool");
// 获取表对象
MongoCollection<Document> table = db.getCollection("student");
Bson b1 = Filter.and(
Filters.eq("cid","1"),
Filters.get("sname","张三"),
);
FindIterable<Document> find = table.find(b1);
for(Document doc : find) {
System.out.println(doc);
}
mc.close();
}
模糊查询
public static void main(String[] args) {
// 获取Mongo的链接对象
MongoClient mc = new MongoClient("localhost", 27017);
// 获取库对象
MongoDatabase db = mc.getDatabase("myschool");
// 获取表对象
MongoCollection<Document> table = db.getCollection("student");
Bson b1 = Filter.and(
Filters.regex("sname","张"),
);
FindIterable<Document> find = table.find(b1);
for(Document doc : find) {
System.out.println(doc);
}
mc.close();
}
分页查询
public static void main(String[] args) {
// 获取Mongo的链接对象
MongoClient mc = new MongoClient("localhost", 27017);
// 获取库对象
MongoDatabase db = mc.getDatabase("myschool");
// 获取表对象
MongoCollection<Document> table = db.getCollection("student");
//1升序 -1降序
Bson b1 = new Document("id",-1);
FindIterable<Document> find = table.find().sort(b1);
for(Document doc : find) {
System.out.println(doc);
}
mc.close();
}