Mongo数据库操作学习笔记

本文介绍了如何在MongoDB中创建集合、插入和更新文档,以及使用SpringBoot的MongoTemplate进行CRUD操作,包括条件查询和删除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 中对应的方法,上述该类就等于自己创建的接口,使用时直接调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值