MongoDB
1、创建集合
创建指定数据库 xiaoxieDB:use xiaoxieDB;(如果没有该数据库就会自动创建该数据库,有数据库就进入该库中)
使用db.xiaoxieDB.insert()可以无需创建集合,直接插入数据,集合自动创建完毕。
- MongoDB 中存储的文档 必须 有一个_id键(如果我们插入数据的时候未指定_id,系统会自动生成一个默认的 id )。
- 文档操作
文档的数据结构和 JSON 基本一样,所有存储在集合中的数据都是 BSON 格式。BSON 是一种类 JSON 的一种二进制形式的存储格式,简称: Binary JSON 。
定义文档:
document=({_id:1,
name: '王小明',
sex: '男',
hobbies: ['乒乓球','羽毛球'],
birthday: '1996-02-14'
});
插入文档:
db.person.insert(document)
更新操作:
更新文档主要会用到 update() 方法和 save() 方法。
save的使用:
- save() 法也指定了_id,则对文档进行更新;未指定_id则会执行插入功能,MongoDB 默认自动生成一个不重复的_id。
- save用法更加类似于更新操作,但是指定mongo特定的默认主键:《_id》.
update的使用
update仅适用于修改某一条数据中该字段,如下方的该集合中姓名为张三的第一条数据修改为李四; - db.stu2.update({name: “张三”},{$set:{ name: “李四”}})
条件查询
操作 | 格式 | 范例 | 关系数据库中类似的语句 |
---|---|---|---|
等于 | {:} | db.stu1.find({“name”:“李小红”}).pretty() | where name = ‘李小红’ |
小于 | {:{$lt:}} | db.stu1.find({“age”:{$lt:18}}).pretty() | where age < 18 |
小于 | 或等于 {:{$lte:}} | db.stu1.find({“age”:{$lte:18}}).pretty() | where age <= 18 |
大于 | {:{$gt:}} | db.stu1.find({“age”:{$gt:18}}).pretty() | where age > 18 |
大于 | 或等于 {:{$gte:}} | db.stu1.find({“age”:{$gte:18}}).pretty() | where age >= 18 |
不等于 | {:{$ne:}} | db.stu1.find({“age”:{$ne:18}}).pretty() | where age != 18 |
查询举例:
AND 条件
find() 方法可以传入多个键 (key),每个键 (key) 以逗号隔开,即常规 SQL 的 AND 条件。如查询集合 stu1 中年龄为20岁的男性信息:
- db.stu1.find({“age”:20, “sex”:“男”}).pretty()
删除举例: - db.stu1.remove({‘age’:20}) //删除年龄为20的数据
mongo的代码用法:
/**
* author: xie
* Date:2023/10/31 15:14
**/
@Slf4j
@Service
public class MongoDbServiceImpl {
private static final Logger logger = LoggerFactory.getLogger(MongoDbServiceImpl.class);
@Autowired
private MongoTemplate mongoTemplate;
/**
* 保存对象
*
* @param userInfo
* @return
*/
public String saveObj(MongoUserInfo userInfo) {
logger.info("--------------------->[MongoDB save start]");
MongoUserInfo aaa = mongoTemplate.save(userInfo, "xiaoxieDB");
System.out.println("======================" + aaa);
return aaa.getId();
}
/**
* 查询所有
*
* @return
*/
public List<MongoUserInfo> findAll() {
logger.info("--------------------->[MongoDB find start]");
return mongoTemplate.findAll(MongoUserInfo.class);
}
/***
* 根据id查询
* @param id
* @return
*/
public MongoUserInfo getBookById(String id) {
logger.info("--------------------->[MongoDB find start]");
Query query = new Query(Criteria.where("_id").is(id));
return mongoTemplate.findOne(query, MongoUserInfo.class);
}
/**
* 根据名称查询
*
* @param name
* @return
*/
public MongoUserInfo getBookByName(String name) {
logger.info("--------------------->[MongoDB find start]");
Query query = new Query(Criteria.where("name").is(name));
return mongoTemplate.findOne(query, MongoUserInfo.class);
}
/**
* 更新对象
*
* @param userInfo
* @return
*/
public String updateMongoUserInfo(MongoUserInfo userInfo) throws Exception {
logger.info("--------------------->[MongoDB update start]" + userInfo);
//新建
//mongoTemplate.save(userInfo,"xiaoxieDB");
//查询该集合所有数据findAll
//List<MongoUserInfo> aaa = mongoTemplate.findAll(MongoUserInfo.class,"xiaoxieDB");
//System.out.println("===================================" + aaa);
//查询该条数据在mongo的详细信息
Query queryId = new Query(Criteria.where("userCode").is(userInfo.getId()));
MongoUserInfo idCode = mongoTemplate.findOne(queryId,MongoUserInfo.class,"xiaoxieDB");
System.out.println("查询MongoDB库中该条信息=" + idCode);
if(!Objects.isNull(idCode)){
Query query = new Query(Criteria.where("_id").is(idCode.getId()));
//修改地址信息
Update update = new Update()
.set("homeAddress",idCode.getHomeAddress());
mongoTemplate.updateFirst(query,update,"xiaoxieDB");
}else{
System.out.println("查询Mongo库中该用户信息为空!");
}
return "success";
}
/***
* 删除对象
* @param userInfo
* @return
*/
public String deleteBook(MongoUserInfo userInfo) {
logger.info("--------------------->[MongoDB delete start]");
mongoTemplate.remove(userInfo);
return "success";
}
/**
* 根据id删除
*
* @param id
* @return
*/
public String deleteBookById(String id) {
logger.info("--------------------->[MongoDB delete start]");
//findOne
MongoUserInfo userInfo = getBookById(id);
//delete
deleteBook(userInfo);
return "success";
}
}
没有xml文件接口文件等,直接调用 导入的MongoTemplate 方法,调用即可 ;
根据自己的需求调用MongoTemplate 中对应的方法,上述该类就等于自己创建的接口,使用时直接调用。