Mongo数据库操作学习笔记

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB使用读写锁来允许多个用户同时读取一个资源,比如数据库或集合。读操作使用共享锁,写操作使用排它锁。这意味着在读操作时,多个用户可以同时读取相同的数据,而在写操作时,只允许一个用户写入数据,其他用户必须等待。 在长时间的读写操作,如查询、更新或删除,MongoDB同样会产生锁。例如,在多个文档满足某些条件的更新操作中,会产生锁。以下是一些可能会锁住数据库操作类型: - 查询读 - 从游标中读取更多数据 - 写入数据 - 删除数据 - 更新数据 - map-reduce操作 - 创建索引,默认情况下是在前台创建索引,会锁住整个数据库 - eval全局锁,除非使用nolock:true - aggregate操作读取数据 如果想要查看MongoDB实例中的锁情况,可以使用以下方式: 1. 使用`db.serverStatus`命令来查看服务器状态。 2. 使用`db.currentOp`命令来查看当前正在执行的操作。 3. 使用`mongotop`工具来监视MongoDB实例中的读写操作。 4. 使用`mongostat`工具来监视MongoDB实例中的各种统计信息。 5. 查看`locks`集合中的数据,该集合包含了关于锁的详细信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Mongodb锁机制](https://blog.csdn.net/tang_jin2015/article/details/61192020)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值