大纲如下:
Mongodb介绍/安装
命令行增删改查操作
客户端工具mongochef使用
JAVA驱动操作Mongodb
Spring Data Mongodb框架搭建
Spring Data Mongodb框架之MongoTemplate
Spring Data Mongodb框架之代码连接数据库
Spring Data Mongodb框架之去掉_class字段
Spring Data Mongodb框架之Repository
自增ID通用设置,开发者不用关心
批量更新封装
gridfs文件上传下载操作
DBRef的使用
mapreduce实战
aggregation实战
项目实战:用mongodb设计以及编码实现一个权限系统
mongodb
数据结构不固定的
bson(json)
{id:1,name:"张三"}
{id:2,name:"李四",age:22,address:["上海1号","上海2号"]}
DB
集合(collection) ---> table
文档(document) ---> row
key ---> col
命令行增删改查:
show dbs 展示所有数据库
use test 进入某个数据库
db.createCollection("test"); 创建集合
show collections; 查看集合
db.test2.save({"name":"json"}) 插入数据
db.test2.find() 查询数据
db.test2.findOne() 查询第一条
db.test2.find().skip(1).limit(1)分页用法
db.test.find({}).sort({age:1}) 1升序 -1降序
db.test.find({},{age:1}) 只显示需要的字段 1为显示 -1为不显示
db.test.update({name:"kk"},{"$set":{age:11}},true,true) 第三个参数为true表示要修改的数据不存在则插入一条新的,false不修改也不创建。第四个参数为true表示修改所有满足条件的数据,false修改第一条
db.test.drop() 删除集合
db.test.remove({}) 删除集合中所有数据
JAVA驱动操作Mongodb:
package com.tangzhe.mongodb;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.UpdateOptions;
import org.bson.Document;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by 唐哲
* 2018-03-10 18:00
* 测试 Java 操作 MongoDB
*/
public class MongodbTest {
private MongoCollection collection = null;
//@Before
public void before() {
//配置mongo客户端
MongoClientOptions options = MongoClientOptions.builder().connectTimeout(60000).build();
//创建mongo客户端
MongoClient client = new MongoClient(new ServerAddress("localhost", 27017), options);
//获取数据库
MongoDatabase db = client.getDatabase("mamabike");
//获取集合,相当于关系型数据库中的表
collection = db.getCollection("test");
}
/**
* 插入一条数据
*/
//@Test
public void insertOne() {
collection.insertOne(new Document("name", "zhangsan").append("age", 18));
}
/**
* 批量插入
*/
//@Test
public void insertMany() {
List documents = new ArrayList<>(2);
documents.add(new Document("name", "张三").append("age", 19));
documents.add(new Document("name", "李四").append("age", 20));
collection.insertMany(documents);
}
/**
* 修改张三的年龄为22
*/
//@Test
public void updateByName() {
collection.updateOne(Filters.eq("name", "张三"),
new Document("$set", new Document("age", 22)));
}
/**
* 如果查询到则进行修改
* 如果查询不到则插入
*/
//@Test
public void updateOrInsert() {
collection.updateOne(Filters.eq("name", "lisi"),
new Document("$set", new Document("age", 23)),
new UpdateOptions().upsert(true));
}
/**
* 删除一条数据
*/
//@Test
public void deleteOne() {
collection.deleteOne(Filters.eq("name", "lisi"));
}
/**
* 查询第一条数据
*/
//@Test
public void findFirst() {
Document doc = collection.find().first();
System.out.println(doc);
}
/**
* 查询所有
*/
//@Test
public void findAll() {
FindIterable documents = collection.find();
MongoCursor iterator = documents.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
/**
* 多条件查询
*/
//@Test
public void findByQuery() {
Document doc = collection.find(
Filters.and(
Filters.eq("name", "张三"),
Filters.eq("age", 22)
))
.first();
System.out.println(doc);
}
}
package com.tangzhe.mongodb;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.codecs.configuration.CodecRegistries;
import org.bson.codecs.configuration.CodecRegistry;
import org.junit.Before;
import org.junit.Test;
/**
* Created by 唐哲
* 2018-03-10 19:39
*/
public class MongodbTest2 {
//可以指定类型
private MongoCollection collection = null;
//@Before
public void before() {
//配置mongo客户端
MongoClientOptions options = MongoClientOptions.builder().connectTimeout(60000).build();
//创建mongo客户端
MongoClient client = new MongoClient(new ServerAddress("localhost", 27017), options);
//获取数据库
MongoDatabase db = client.getDatabase("mamabike");
//注册类型转换器
CodecRegistry codecRegistry = CodecRegistries.fromRegistries(CodecRegistries.fromCodecs(new UserCode()));
//获取集合,相当于关系型数据库中的表
collection = db.getCollection("test", User.class).withCodecRegistry(codecRegistry);
}
/**
* 插入一个javabean到mongodb
*/
//@Test
public void insertTest() {
User user = new User();
user.setName("王五");
user.setAge(33);
collection.insertOne(user);
}
//从mongodb读取数据,封装成javabean
//@Test
public void findTest() {
User user = collection.find().first();
System.out.println(user);
}
}
package com.tangzhe.mongodb;
import lombok.Data;
import org.bson.types.ObjectId;
/**
* Created by 唐哲
* 2018-03-10 19:38
*/
@Data
public class User {
private ObjectId _id;
private String name;
private Integer age;
}
package com.tangzhe.mongodb;
import org.bson.BsonReader;
import org.bson.BsonWriter;
import org.bson.codecs.Codec;
import org.bson.codecs.DecoderContext;
import org.bson.codecs.EncoderContext;
/**
* Created by 唐哲
* 2018-03-10 19:43
* 转换器
*/
public class UserCode implements Codec {
@Override
public User decode(BsonReader bsonReader, DecoderContext decoderContext) {
bsonReader.readStartDocument();;
User user = new User();
user.set_id(bsonReader.readObjectId("_id"));
user.setName(bsonReader.readString("name"));
user.setAge(bsonReader.readInt32("age"));
bsonReader.readEndDocument();
return user;
}
@Override
public void encode(BsonWriter bsonWriter, User user, EncoderContext encoderContext) {
bsonWriter.writeStartDocument();
bsonWriter.writeString("name", user.getName());
bsonWriter.writeInt32("age", user.getAge());
bsonWriter.writeEndDocument();
}
@Override
public Class getEncoderClass() {
return User.class;
}
}