MongDB学习笔记

MongoDB学习笔记之整合SpringBoot 环境准备 1、引入依赖 <!--spring data mongodb--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> 2、配置yml spring: data: mong 阅读详情

1.NoSQL的特点

是一种非关系型数据库,文档形式的存储
特点:文档数据库将数据以文档的形式存储,BSON格式,类似JSON,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串/数字/日期等。也可以是复杂的类型。
==优点:==数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构
==缺点:==查询性能不高,缺乏统一的查询语法
应用场景:日志,web应用等
在这里插入图片描述

启动命令:

--dbpath: 指定数据文件存放目录
--logpath:指定日志文件,注意是指定文件不是目录
--logappend:使用追加的方式记录日志
--port:指定端口,默认为27017
--bind_ip:绑定服务IP,若绑定127.0.0.1,则只能本机访问,默认为本机地址

mongod --dbpath D:\MongDB\data\db
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.安全认证

创建管理员账号

#设置管理员用户名密码需要切换到admin库
use admin
#创建管理员
db.createUser({user:"fox",pwd:"fox",roles:["root"]})
#查看所有用户信息
show users
#删除用户
db.dropUser("fox")
#使用用户进行登录,默认到admin库
mongo -ufox -pfox --authenticationDatabase=admin

4.MongoDB文档操作

1.插入文档
2.查询文档

db.collection.find(query,projection)
db.collection.findOne(query,projection)
*query:可选,使用查询操作符指定查询条件
*projection:可选,使用投影操作符指定返回的键
查询对照表
在这里插入图片描述
在这里插入图片描述

例:

例:

查出库users中所有数据

db.users.find()

条件查询,查询user值为root的

db.users.find({user:“root”})

查询某个值大于某个数的值

db.users.find({age:{$gt:60}})

查询出第一条

db.users.findOne()

排序&分页
在MongoDB中使用sort()方法对数据进行排序

#指定按收藏数(favCount)降序返回  -1表示降序   表示升序
favCount  type都是字段名
db.books.find({type:"travel"}).sort({favCount:-1})

分页查询:通过skip和limit去实现,skip表示指定跳过记录数,limit表示限定返回结果数量
例:

db.books.find().skip().limit(5)
3.更新文档

可以用update命令对指定的数据进行更新,命令格式如下:

db.collection.update(query,update,options)
db.collection.updateOne(query,update,options) //更新单个文档 相当于 multi属性为true
db.collection.updateMany(query,update,options) //更新多个文档
db.collection.replaceOne(query,update,options) //替换单个文档
# 属性解释:
# query :描述更新的查询条件
# update:描述更新的动作及新的内容
# options:描述更新的选项
# - upsert:可选,如果不存在update的记录,是否插入新的记录。默认false,不插入
  - multi:可选,是否按条件查询出的多条记录全部更新。默认false,只更新找到的第一条记录
  - writeConcern:可选,决定一个写操作落到多少个节点上才算成功(类似于事务操作)

update操作符如下:
在这里插入图片描述
例:

db.books.update({type:"novel"},{$Set:{publishedDate:new Date()}},{"multi":true})

注意:如果udate命令中的更新描述不包含任何操作符,那么MongoDB会实现文档的replace语义

例:
db.books.update({type:"novel"},{age:"1"})
会先找到type为novel的数据,然后它的内容被全部替换,替换的只剩 age:1
findAndModify命令:

查找并更新,只能操作单文档,不能操作多文档
格式:

例:增加new :true,会返回更新后的值,false返回更新前的值
db.books.findAndModify({query:{},update:{}},new :true)

findOneAndUpdate: 更新单个文档并返回更新前(或更新后)的文档
findOneAndReplace:替换单个文档并返回替换前(或替换后)的文档

4.删除文档

remove命令
例:

例:
db.books.remove({age:28}) //删除age等于28 的记录
db.books.remove({age:{$lt:25}})  //删除age小于25的记录
db.books.remove({}) //删除所有记录

假如符合条件的有多个,但是只删除第一个,则需要制定justOne的参数,格式如下
例:

例:
db.books.remove({age:28},true) 

delete命令:
官方推荐使用deleteOne()和deleteMany()方法删除稳定,语法格式如下:

例:
db.books.deleteMany({}) //删除集合下全部文档
db.books.deleteMany({type:"novel"})  //指定条件的数据全部删除
db.books.deleteOne({type:"novel"})  //指定条件的数据,只删除第一个

如果需要返回被删除的文档
命令:findOneAndDelete

例:
db.books.findOneAndDelete({type:"novel"}) //删除集合下全部文档

MongoDB整合SpringBoot

1引入依赖
   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
   </dependency>
2.yml文件配置
spring:
  data:
    mongodb:
      uri: mongodb://fox:fox@127.0.0.1:27017/user?authSource=admin
      #uri等同于下面的配置
#      database: user
#      host: 127.0.0.1
#      port: 27017
#      username: fox
#      password: fox
#      authentication-database: admin
3.注入bean
 @Autowired
    MongoTemplate mongoTemplate;

4.使用

1.增删改集合

 //集合的操作
    @RequestMapping("/test1")
    public void ok(){
        //判断集合是否存在
        boolean flag = mongoTemplate.collectionExists("emp");
        if(flag){
            //删除集合
            mongoTemplate.dropCollection("emp");
        }
        //创建集合
        MongoCollection<Document> emp1 = mongoTemplate.createCollection("emp");
    }

    //文档的查询操作
    @RequestMapping("/test2")
    public void test2(){
        //=============普通查询====================
        //查询出所有文档
        List<User> list = mongoTemplate.findAll(User.class);
        //根据ID查询
        User us = mongoTemplate.findById(1, User.class);
        //查询结果是多个,返回其中第一个
        User u = mongoTemplate.findOne(new Query(), User.class);

        //=============条件查询=====================
        //构建查询条件
        Query query1 = new Query(Criteria.where("salary").gte(8000));
        Query query2 = new Query(Criteria.where("salary").gte(8000).lt(10000));
        Query query3 = new Query(Criteria.where("name").regex("张")); //模糊匹配


        //==============多条件查询===================
        Criteria criteria1 = new Criteria();
        Criteria criteria2 = new Criteria();
        //and的条件
        criteria1.andOperator(Criteria.where("age").gt(25),Criteria.where("salary").gt(8000));
        //or的条件
        criteria1.orOperator(Criteria.where("age").gt(25),Criteria.where("salary").gt(8000));

        Query query = new Query(criteria1);

        //sort排序
        query.with(Sort.by(Sort.Order.desc("salary")));
        //分页
        query.skip(1).limit(10);
        //查询出所有文档,第三个参数是集合名
        List<User> list = mongoTemplate.findAll(query, TestUser.class, "test2");
    }

    //文档的更新操作
    @RequestMapping("/test3")
    public void test3(){
        //先查询出要修改的
        Query query = new Query(Criteria.where("salary").gte(8000));
        User u = mongoTemplate.findOne(query, User.class);
        Update update = new Update();
        update.set("name","张三");
        //UpdateResult()
        //UpdateFirst()更新满足条件的第一条记录
        //UpdateMulti()更新所有满足条件的记录
        //upsert()  没有符合条件的记录则插入数据
        UpdateResult updateResult = mongoTemplate.upsert(query, update, User.class);

        //返回修改的记录数
        System.out.println(updateResult.getModifiedCount());
    }

2.查询
使用bson当作查询条件进行查询

//1.构造查询条件
	 Bson filters = Filters.and(
                Filters.eq("deviceId", warningEvent.getDeviceId()),
                Filters.gte("date", strTime.getTime()),
                Filters.lte("date", endTime.getTime()),
                Filters.eq("lastUpdateTime", DateUtil.format(updateDate, "yyyy-MM-dd HH:mm"))
        );
    //2.指定字段排序,升序或者降序
     Bson sort = Sorts.ascending("name");
     //   Bson sort = Sorts.descending("name");
     //3.指定返回字段
        List<String> list = new ArrayList<>();
        list.add("name");
        list.add("age");
        // Inclusion 包含了指定的字段和(隐式的)_id字段
        // Exclusion 包含了指定的字段和(隐式的)_id字段
       Bson fields = Projections.fields(Projections.include(list));
    //4.去指定集合中进行查询
	MongoCursor<Document> mongoCursor = mongoTemplate.getCollection("weatherall").find(filters).projection(fields).sort(sort).iterator();
            while (mongoCursor.hasNext()) {
                Document document = mongoCursor.next();
                //3.根据字段名获取数据
                wdspList.add(document.getDouble("name"));
                wdirList.add(document.getDouble("age"));
                //document.getInteger()
                lstDate.add(DateUtil.format(new Date(document.getLong("date")), "yyyy-MM-dd HH:mm"));
            }
mongDB学习笔记 插入多条数据:db.car_info.insertMany([{“number”:“川G123456”,“type”:“小轿车”,“driver_id”:“002”},{“number”:“川G00000”,“type”:“小轿车”,“driver_id”:“003”}]) 需要注意的是,插入多条数据时,被插入内容是存放于一个数组中。插入单条数据:db.car_info.insert({“number”:“川G123456”,“type”:“小轿车”,“driver_id”:“002”}) 阅读详情

相关推荐

Frida Hook HashMap.put 定位安卓App加密参数

HashMap是安卓应用网络请求参数组装的核心数据结构,其put方法作为键值对注入的必经入口,具备签名稳定、不受混淆影响、无反调试风险等工程优势。基于Frida的Java层Hook能力,可精准捕获明文参数(如username、timestamp)与密文字段(如sign、token)的生成时序,进而推断加密逻辑与调用链路。该方法适用于协议分析、API安全审计及竞品接口逆向等典型场景,尤其在加固App(如腾讯乐固)和Android 7–14系统中表现稳健,已成为安卓逆向中兼顾效率与可靠性的基础技术路径。

weixin_33991418的博客 388

Mongodb注入

Mongodb注入

acepanhuan的博客 1594

Vivado与VCS+Verdi联合仿真环境搭建全攻略

本文详细介绍了如何搭建Vivado与VCS+Verdi联合仿真环境,旨在解决Vivado Simulator在大型FPGA验证中速度慢、调试弱的问题。通过指导工具版本配对、环境变量设置、关键参数配置及Xilinx仿真库编译,帮助工程师高效整合Vivado的设计管理、VCS的高速仿真与Verdi的深度调试能力,从而显著提升验证效率。

weixin_29219189的博客 576

MongoDB学习笔记三

mongo入门;mongo原生使用手册

九离的博客 686

【验证技能树】UVM 源码解读01 -- UVM本质上就是软件工程方法论在芯片验证领域的应用

文章摘要: UVM(通用验证方法学)是基于SystemVerilog的芯片验证框架,采用组件化、面向对象和事务级抽象设计。其核心在于职责分离与数据流,通过Driver、Monitor、Sequencer等模块协作实现高效验证。UVM强调复用性、可扩展性和可维护性,类似软件工程的模块化与低耦合原则。理解其体系结构比记忆API更重要,有助于灵活组合组件并提升验证效率。UVM不仅是工具,更融合了软件工程思维,推动验证工作向自动化、系统化发展。掌握UVM底层逻辑能优化验证环境设计,适用于从IP到SoC的多层级验证场

qq_45869788的博客 1038

OpenClaw记忆插件升级实战:从memory-lancedb-pro安装到AgentSkill封装

向量数据库作为现代AI应用的核心基础设施,通过将非结构化数据转换为高维向量并利用相似度检索实现语义理解。其原理基于嵌入模型生成向量表示,结合近似最近邻搜索算法实现高效查询。这项技术为智能体系统提供了长期记忆和上下文感知能力,显著提升了对话连贯性与任务执行效率。在AI智能体开发领域,向量数据库常用于知识库构建、对话历史管理和个性化推荐等场景。本文聚焦OpenClaw框架中memory-lancedb-pro插件的部署实践,针对**插件加载顺序**和**Apache Arrow依赖**两大常见痛点,通过封装成可

weixin_42525482的博客 636

MongoDB详解(有这一篇就够了)

MongoDB 是由C++语言编写的,基于分布式文件存储的数据库,是一个介于关系数据库和非关系数据库之间的产品,是最接近于关系型数据库的NoSQL数据库。MongoDB 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于JSON对象。字段值可以包含其他文档,数组及文档数组类似于MongoDB优点:数据处理能力强,内存级数据库,查询速度快,扩展性强,只是不支持事务。

lfnew的博客 8710

从零开始解析N-CMAPSS数据集:航空发动机健康管理的入门指南

本文详细解析了N-CMAPSS数据集在航空发动机健康管理中的应用,从数据集的构成、关键变量到实际数据分析方法,为初学者提供了全面的入门指南。通过Python代码示例,展示了如何加载、探索和建模这一复杂数据集,帮助读者掌握航空发动机性能预测的核心技术。

weixin_29063979的博客 317

万字总结,建议收藏慢慢看!数据库安全之MongoDB渗透!,JDK8中HashMap依然会产生死循环问题

手绘了下图所示的kafka知识大纲流程图(xmind文件不能上传,导出图片展现),但都可提供源文件给每位爱学习的朋友,这个应该是靶场的问题。自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

777

CST微波工作室端口设置保姆级教程:从波导端口到离散端口,手把手教你搞定S参数仿真

本文提供CST微波工作室端口设置的详细教程,涵盖波导端口和离散端口的选择与配置,助力工程师精准完成S参数仿真。通过微带线滤波器案例,详解端口尺寸、阻抗设置及常见问题排查,提升仿真效率与准确性。

weixin_42570296的博客 357

TwinCAT3 主站动态配置 PDO 的实战技巧与性能优化

本文深入探讨了TwinCAT3主站动态配置PDO的实战技巧与性能优化策略。通过对比静态PDO的局限,阐述了动态配置在提升系统灵活性、降低网络负载和保障实时性方面的核心优势。文章提供了从环境准备、代码实现到错误排查的完整流程,并重点解析了PDO映射、SDO通道区别以及分布式时钟同步等关键概念,帮助工程师掌握EtherCAT网络性能调优的核心方法。

weixin_29213525的博客 346

mongdb学习笔记

一、MongoDB简介   MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。Mongo使用C++开发。Mongo的官方网站地址是:http://www.mongodb.org/,读者...

chuyang4613的博客 126

基于ROS2 Humble和VGR数据集完整部署GADEN气体分散仿真环境及模型替换实践

文章摘要 本文详细介绍了基于ROS2 Humble和VGR数据集部署GADEN气体分散仿真环境的方法。GADEN是一款专为移动机器人嗅觉研究设计的3D仿真框架,能够精确模拟气体扩散过程并集成多种环境传感器。文章从系统配置开始,逐步指导读者完成ROS2 Humble环境的搭建、GADEN框架的编译部署,以及VGR数据集的使用。VGR数据集包含120个基于真实房屋模型的CFD仿真案例,为研究提供高度真实的测试环境。教程涵盖了常见问题的解决方案,并深入探讨了气体扩散模型参数的修改方法,为机器人嗅觉算法的开发和验证

huanghm88的专栏 270

Mongdb文档学习笔记

   The difference between insert and save operations is that a save operation will perform an insert if the object is not already present. savesaves the object overwriting any...

weixin_30547797的博客 88

【Bluetooth|蓝牙开发】二、蓝牙开发入门

蓝牙,是一种利用低功率无线电,支持设备短距离通信的无线电技术,能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换,蓝牙工作在全球通用的2.4GHz ISM(即工业、科学、医学)频段,使用IEEE802.11协议。

Donge's Blog 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

MongDB学习笔记_修改器及其他

mongodb是一种基于文档的NOSQL数据库,是scheme free的数据库,没有模式,模式自由也就意味着没有固定的表结构,所有存储的数据就更加自由。 本文主要介绍MongoDB中的修改器

会呼吸的鱼 507

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

mongdb学习笔记(1)

学习mongo一段时间了,因为是平时用不到,所以学点东西总是不断忘记,现在记下来,方便以后查看。 参看资料>,>以及一些其他资料 其他介绍就不必,直接从使用入手吧,因为网上的安装mongdb的例子很多这里就不在重复了 (一)mongodb工具的大概介绍 安装完mongod后会在bin目录下有如下文件(window下会以.exe结尾): bsondump:将bjson文档转化为json文档

u013937055的专栏 673

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

MongDB学习笔记(二):索引操作

1、查询索引:db.coll_name.getIndexes()

1180

MongDB数据库学习笔记(三)

上一篇文章学习了mongoDB的基本操作,本篇我们来学习java操作mongDB具体实例,以及mongDB的复制,分片和存储

lydon1314的博客 241

学习笔记0716----NOSQL之mongdb

mongdb1. mongodb介绍 1. mongodb介绍

嘻哈记的运维学习之路 541

MongDB学习笔记(一):基本命令汇集

1、浏览数据库、集合: show dbs show collection

1192
上一篇: java下载文件接口
下一篇: poi-tl的使用(最全详解)
Sonk.
博客等级 码龄8年 84粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sonk.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值