Mongodb的数据库简介、docker部署、操作语句以及java应用
Mongodb的数据库简介、docker部署、操作语句以及java应用
本文主要介绍了mongodb的基础概念和特点,以及基于docker的mongodb部署方法,最后介绍了mongodb的常用数据库操作语句(增删改查等)以及java下的常用语句。
一、基础概念
1、Mongodb简要介绍
MongoDB是一个基于分布式文件存储的数据库。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
2、基础概念
(1)文档field(记录):
“类似json的bson格式,同一张表的数据结构可以不固定,MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。
(2)集合Collection(表):
集合就是一组文档,类似于关系数据库中的表。
可以使用“.”按照命名空间将集合划分为子集合。
(3)数据库DataBase:
中多个文档组成集合,多个集合组成数据库。在磁盘上,不同的数据库存放在不同的文件中.
MongoDB 中存在以下系统数据库。
Admin 数据库、Local 数据库、Config 数据库。
3、与关系型数据库类比
DataBase==> ==> Document ==> field(key/value)
二、特性和应用场景
1、特性
(1)大数据量
(2)高并发(虚拟内存)
(3)数据结构可扩展性:(数据结构不固定)表结构灵活可变,字段类型可以随时修改。
(4)应用不需要事务以及复杂的 join 支持,价值较低的数据,对事务性要求不高
2、应用场景
游戏场景,使用MongoDB存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新。
物流场景,使用MongoDB存储订单信息,订单状态在运送过程中会不断更新,以MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
社交场景,使用MongoDB存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。
物联网场景,使用MongoDB存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。
视频直播,使用MongoDB存储用户信息、礼物信息等。
三、docker下的mongodb部署
1、部署mongodb
docker search mongodocker pull mongo:latestcd /datamkdir mongo_local_datadocker run --name my_mongo -v /data/mongo_local_data:/data/db --rm -d -p 27017:27017 mongodocker ps
2、进入mongodb数据库
docker exec -it my_mongo /bin/bashcd /bin
可见有mongosh
mongosh admin
附:
docker exec -it <容器id> mongo admin 报错如下解决办法
[root@iZ2zehrk49wgv86b2hqvncZ ~]# docker exec -it 67c3f3893ce8 mongo admin
OCI runtime exec failed: exec failed: unable to start container process: exec: "mongo": executable file not found in $PATH: unknown
按如上,先进入容器,再mongosh admin
四、Mongodb的主要操作
1、创建账户
db.createUser({ user:'root',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},'readWriteAnyDatabase']});
2、连接数据库
db.auth('root', '123456')

3、创建数据库
use my_mongodb
4、创建集合
db.createCollection('shucai_record')
5、插入数据
db.集合名.insert(JSON数据)
mongodb会给每条数据增加一个全球唯一的_id键
db.getCollection("shucai_record").insert( {
_id: ObjectId("638e8e739320275867030e4c"),
readTimestamp: NumberLong("1670286944653"),
address: "DB14.2",
value: NumberInt("0"),
DeviceId: NumberInt("1368")
} );
db.getCollection("shucai_record").insert( {
_id: ObjectId("638e8e739320275867030e4d"),
readTimestamp: NumberLong("1670286944653"),
address: "DB14.4",
value: NumberInt("0"),
DeviceId: NumberInt("1368")
} );
db.getCollection("shucai_record").insert( {
_id: ObjectId("638e8e739320275867030e4e"),
readTimestamp: NumberLong("1670286944653"),
address: "DB14.6",
value: NumberInt("0"),
DeviceId: NumberInt("1368")
} );
db.getCollection("shucai_record").insert( {
_id: ObjectId("638e8e739320275867030e4f"),
readTimestamp: NumberLong("1670286944653"),
address: "DB14.8",
value: NumberInt("0"),
DeviceId: NumberInt("1368")
} );
db.getCollection("shucai_record").insert( {
_id: ObjectId("638e8e739320275867030e50"),
readTimestamp: NumberLong("1670286944653"),
address: "DB14.10",
value: NumberInt("0"),
DeviceId: NumberInt("1368")
} );

6、查找数据
db.集合名.find({键:{运算符:值}})
Eg:
查找设备点位地址为DB14.10和DB14.8的数据:
db.getCollection("shucai_record").find({address:{$in:["DB14.10","DB14.8"]}})
7、修改数据
db.集合名.update(条件,新数据[是否新增,是否修改多条,])
inc递增rename重命名列set修改列值unset删除列
Eg:
(1)设备点位地址为DB14.8的数据,value值加上4:
db.shucai_record.update({address:{$in:["DB14.8"]}},{$inc:{value:4}})db.getCollection("shucai_record").find({address:{$in:["DB14.10","DB14.8"]}})
(2)设备点位地址为DB14.8的数据,value值改为30(第一个true: 如果没找到DB14.8的数据,则新增,value值为30;第二个true: 如果找到多条,多条进行更新,value值改为30)
db.shucai_record.update({address:{$in:["DB14.10"]}},{$set:{value:30}},true,true)

db.getCollection("shucai_record").find({address:{$in:["DB14.10","DB14.8"]}})

8、删除数据
db.集合名.remove(条件[,是否删除一条])
Eg:删除设备点位地址为DB14.10的数据,(false: 如果找到多条就删除多条)
db.shucai_record.remove({address:{$in:["DB14.10"]}},false)

db.getCollection("shucai_record").find({address:{$in:["DB14.10","DB14.8"]}})

9、删除集合
db.集合名.drop()
10、删除数据库
db.dropDataBase()
11、索引的建立和查看
# 索引建立
db.集合名.ensureIndex({字段名:1(1:升序-1降序)},{name:"索引名"})
# 索引查看
db.集合名.getIndexes()
#索引删除
db.集合名.dropIndex("索引名")
Eg:
db.shucai_record.ensureIndex({readTimestamp:1},{name:"timeIndex"})
db.shucai_record.getIndexes()
db.shucai_record.dropIndex("timeIndex")

Bson filter = Filters.and(Filters.eq("DeviceId", device.getId()), Filters.eq("address", factoryIndexAddress.getParamAddress()), Filters.gte("readTimestamp", beginTimeStamp), Filters.lte("readTimestamp", endTimeStamp));
五、java中的mongodb操作【主要介绍 查询操作】
1、数据库连接及集合选定
String mongoCollection = “shucai_record”MongoCollection<Document> collection = mongoTemplate.getCollection(mongoCollection);
2、筛选条件
Bson filter = Filters.and(Filters.eq("DeviceId", device.getId()), Filters.eq("address", factoryIndexAddress.getParamAddress()), Filters.gte("readTimestamp", beginTimeStamp), Filters.lte("readTimestamp", endTimeStamp));
3、查找
FindIterable<Document> projection = null;projection = collection.find(filter).sort(Sorts.descending("readTimestamp"));
4、查找结果的条数
long projectionTotal = collection.countDocuments(filter);
5、查找结果遍历 和 获取查找结果的值
MongoCursor<Document> cursor = projection.iterator();
Document lastData = cursor.next();String address = lastData.get("address").toString();
while (cursor.hasNext()) {documentData = cursor.next();if ((Boolean) documentData.get("value") == false) {//其他逻辑处理,eg:continueFlag = false;}}
相关文章:
Mongodb的数据库简介、docker部署、操作语句以及java应用
Mongodb的数据库简介、docker部署、操作语句以及java应用 本文主要介绍了mongodb的基础概念和特点,以及基于docker的mongodb部署方法,最后介绍了mongodb的常用数据库操作语句(增删改查等)以及java下的常用语句。 一、基础概念 …...
七大战略性新兴产业崭露头角:新能源电燃灶或将成为未来厨房新宠
近日,在国家发布的七大战略性新兴产业名单中,新能源产业赫然在列,作为其中的重要组成部分,华火新能源电燃灶凭借其独特的优势,正逐渐走进人们的视野,有望成为未来厨房的新宠。 华火新能源电燃灶作为清洁能源…...
C#进阶-用于Excel处理的程序集
在.NET开发中,处理Excel文件是一项常见的任务,而有一些优秀的Excel处理包可以帮助开发人员轻松地进行Excel文件的读写、操作和生成。本文介绍了NPOI、EPPlus和Spire.XLS这三个常用的.NET Excel处理包,分别详细介绍了它们的特点、示例代码以及…...
持续总结中!2024年面试必问 20 道 Kafka面试题(五)
上一篇地址:持续总结中!2024年面试必问 20 道 Kafka面试题(四)-CSDN博客 九、请解释Kafka中的Zookeeper的作用。 在Kafka中,ZooKeeper扮演着至关重要的角色,主要负责集群管理、协调和状态同步等功能。以下…...
Draw.io 使用详细教程
Draw.io 是一款功能强大的在线绘图工具,适用于创建流程图、网络图、组织结构图、UML 图等。以下是详细的使用教程,包括基本操作、快捷键、常用技巧和进阶技巧。 1. 创建新图 选择存储位置 首次使用时,系统会询问你要将图保存到哪里。你可以…...
人工智能学习笔记(1):了解sklearn
sklearn 简介 Sklearn是一个基于Python语言的开源机器学习库。全称Scikit-Learn,是建立在诸如NumPy、SciPy和matplotlib等其他Python库之上,为用户提供了一系列高质量的机器学习算法,其典型特点有: 简单有效的工具进行预测数据分…...
PromptPort:为大模型定制的创意AI提示词工具库
PromptPort:为大模型定制的创意AI提示词工具库 随着人工智能技术的飞速发展,大模型在各行各业的应用越来越广泛。而在与大模型交互的过程中,如何提供精准、有效的提示词成为了关键。今天,就为大家介绍一款专为大模型定制的创意AI…...
IDEA升级web项目为maven项目乱码
今天将一个java web项目改造为maven项目。 首先,创建一个新的maven项目,将文件拷贝到新项目中。 其次,将旧项目的jar包,在maven的pom.xml做成依赖 接着,把没有maven坐标的jar包在编译的时候也包含进来 <build>…...
存内计算与扩散模型:下一代视觉AIGC能力提升的关键
目录 前言 视觉AIGC的ChatGPT4.0时代 扩散模型的算力“饥渴症” 存内计算解救算力“饥渴症” 结语 前言 在这个AI技术日新月异的时代,我们正见证着前所未有的创新与变革。尤其是在视觉内容生成领域(AIGC,Artificial Intelligence Generate…...
如何上传模型素材创建3D漫游作品?
一、进入3D空间漫游互动工具编辑器 进入720云官网-点击“开始创作”-选择3D空间漫游-进入到作品创建页面。 二、上传模型及素材,创建生成3D空间漫游模型 1.创建3D空间作品:您可以选择新建空白作品或使用720云提供的预设空间模板,本篇主要介绍…...
NFS p.1 服务器的部署以及客户端与服务端的远程挂载
目录 介绍 应用 NFS的工作原理 NFS的使用 步骤 1、两台机子 2、安装 3、配置文件 4、实验 服务端 准备 启动服务: 客户端 准备 步骤 介绍 NFS(Network File System,网络文件系统)是一种古老的用于在UNIX/Linux主…...
性能工具之 JMeter 常用组件介绍(二)
文章目录 一、Thread Group二、断言组件1、Response Assertion:响应断言2、Response Assertion:响应断言3、Duration Assertion:响应时间断言4.、JSON Assertion:json断言 一、Thread Group 线程组也叫用户组,是性能测…...
Bev 车道标注方案及复杂车道线解决
文章目录 1. 数据采集方案1.1 传感器方案1.2 数据同步2. 标注方案2.1 标注注意项2.2 4d 标注(时序)2.2.1 4d标签制作2.2.2 时序融合的作用2.2.2.1 时序融合方式2.2.2.2 时序融合难点2.2.2.2 时序实际应用情况3. 复杂车道线解决3.1 split 和merge车道线的解决3.2 大曲率或U形车道…...
vue 将echart 下载为base64图片
1 echart是页面的子组件, 2 页面有多个echart 3 将多个echart下载为base64图片 // 子组件 echart,要保存echartconst chart this.$echarts.init(this.$refs.chart, light) this.chartData chart; //保存数据,供父组件alarmReport调用(th…...
视频汇聚EasyCVR平台视图库GA/T 1400协议与GB/T 28181协议的区别
在公安和公共安全领域,视频图像信息的应用日益广泛,尤其是在监控、安防和应急指挥等方面。为了实现视频信息的有效传输、接收和处理,GA/T 1400和GB/T 28181这两个协议被广泛应用。虽然两者都服务于视频信息处理的目的,但它们在实际…...
白杨SEO:小红书标题怎么写?小红书怎么推广引流到微信?小红书违规注销不了怎么办?33个小红书运营常见问题解答【干货】
前言:这是白杨SEO公号原创第533篇。为什么想到写这个?因为很多白杨SEO朋友在做小红书遇到这样或那样的问题来问我,所以我把一些问得较多的常见热门问题整理写出来,有需要的可以随时查看,收藏与分享。图片在公众号白杨S…...
Linux压测
目录 CPU压测 内存压测 本文主要是编写了shell脚本,对Linux系统进行CPU和内存的压测。 CPU压测 [rootlocalhost ~]# cat cpu_stress_test.sh #!/bin/bash # 定义压测CPU的函数 function test_cpu() { # 初始化时间变量 local time # 获取参数 while geto…...
Linux如何远程连接服务器?
远程连接服务器是当代计算机技术中一个非常重要的功能,在各种领域都有广泛的应用。本文将重点介绍如何使用Linux系统进行远程连接服务器操作。 SSH协议 远程连接服务器最常用的方式是使用SSH(Secure Shell)协议。SSH是一种网络协议ÿ…...
Java 应用部署与优化:简单介绍Java应用的部署策略,并讲解一些常用的Java应用性能优化技巧
I. Java 应用部署 A. 容器化部署 Docker 的简介及其优势 Docker是一种开源的容器化技术,它可以将应用及其依赖打包在一起作为一个可运行的独立单元进行运行。Docker的主要优势包括以下几点: 便携性:无论在哪种环境下,只要安装了Docker,就可以运行Docker容器。 一致性:…...
cudart link错误自动修复脚本
问题 在conda安装cuda环境时 mamba install pytorch torchvision torchaudio pytorch-cuda12.1 -c pytorch -c nvidia -y mamba install nvidia/label/cuda-12.1.0::cuda安装的envs/xxx/lib/libcudart.so 会link到错的 如果手动修复太复杂,我写了一个脚本自动修复…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
