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到错的 如果手动修复太复杂,我写了一个脚本自动修复…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
