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 mongo

docker pull mongo:latest

cd /data

mkdir mongo_local_data

docker run --name my_mongo -v /data/mongo_local_data:/data/db --rm -d -p 27017:27017 mongo

docker ps

2、进入mongodb数据库

docker exec -it my_mongo /bin/bash

cd /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;
      
    }
   
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/674193.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WebPack插件实现:打包之后自动混淆加密JS文件

在WebPack中调用JShaman&#xff0c;实现对编译打包生成的JS文件混淆加密 一、插件实现 1、插件JShamanObfuscatorPlugin.js&#xff0c;代码&#xff1a; class JShamanObfuscatorPlugin { apply(compiler) { compiler.hooks.emit.tapAsync(JShamanObfuscatorPlugin, (comp…

【Python网络爬虫】详解python爬虫中正则表达式、BeautifulSoup和lxml数据解析

&#x1f517; 运行环境&#xff1a;PYTHON &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

SpringMVC日期格式处理 分页条件查询

实现日期格式处理 实现分页条件查询&#xff1a; 分页条件查询 和 查询所有 是两个不同的方法&#xff0c;使用同一个mapper的查询功能&#xff0c;但是两个不同的业务方法 ​​​​​​​

2024年5月2日 Go生态洞察:Go 1.22中的安全随机性

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a;…

切勿大意!痉挛性斜颈治疗中的三个重要“禁忌”,后果堪忧!

今天&#xff0c;要给大家讲一个非常重要的话题——痉挛性斜颈的治疗。痉挛性斜颈是一种常见的神经肌肉疾病&#xff0c;患者在日常生活中可能会遇到许多困扰和不便。因此&#xff0c;及早治疗对患者来说至关重要。 然而&#xff0c;在治疗痉挛性斜颈的过程中&#xff0c;千万切…

计算机网络学习实践:模拟RIP动态路由

计算机网络学习实践&#xff1a;模拟RIP动态路由 模拟动态路由RIP协议 1.实验准备 实验环境&#xff1a;华为模拟器ENSP 实验设备&#xff1a; 3个路由器&#xff0c;3个二层交换机&#xff08;不是三层的&#xff09;&#xff0c;3个PC机 5个网段 192.168.1.0 255.255.…

计算机网络学习实践:DHCP跨网段动态分配IP

计算机网络学习实践&#xff1a;DHCP跨网段动态分配IP 1.实验准备 实验环境&#xff1a;思科的模拟器 实验设备&#xff1a; 1个服务器&#xff0c;2个二层交换机&#xff08;不是三层的&#xff09;&#xff0c;4个PC机&#xff0c;1个路由器 三个网段 192.168.1.0 255.…

【操作系统】详谈操作系统的发展历程

文章主题 导读一、手工操作阶段1.1 计算机的诞生1.2 计算机的使用 二、批处理阶段2.1 单道批处理系统2.2 多道批处理系统 三、分时操作系统3.1 分时技术3.2 分时操作系统3.1 分时系统的主要特征 四、实时操作系统五、网络操作系统和分布式计算机系统六、个人计算机操作系统结语…

【cdo专辑】2.1 文件信息(下)

目录 0.先cd进数据路径&#xff08;进行操作前一定要进入数据文件夹奥&#xff09; 1.输出文件格式&#xff08; cdo showformat nc文件&#xff09; 2.输出变量名&#xff08; cdo showname nc文件&#xff09; 3.输出变量标准名称&#xff08; cdo showstdname nc文件&am…

从“百模”到“千体”:大模型智能体的竞争格局、商业模式和技术挑战

原本平静的5月&#xff0c;从14日凌晨OpenAI发布GPT-4o开始热闹起来。 一天之后&#xff0c;谷歌在一年一度的开发者大会上发布智能助理项目Astra和轻量化多模态模型Gemini 1.5 Flash。 同一天&#xff0c;字节升级了AI助手“豆包”和应用开发平台“扣子”&#xff0c;并发布…

Postgre数据库初探

一、PostgreSQL介绍 PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES&#xff0c; 版本 4.2为基础的对象关系型数据库管理系统&#xff08;ORDBMS&#xff09;。POSTGRES 领先的许多概念在很久以后才出现在一些商业数据库系统中。 PostgreSQL是最初的伯克利代码的开…

linux内核零拷贝技术详解

1.前言 Linux系统中一切皆文件&#xff0c;仔细想一下Linux系统的很多活动无外乎读操作和写操作&#xff0c;零拷贝就是为了提高读写性能而出现的。 2. 数据拷贝基础过程 在Linux系统内部缓存和内存容量都是有限的&#xff0c;更多的数据都是存储在磁盘中。对于Web服务器来说…

linux系统上shell脚本编写问题总结

需求背景&#xff1a;项目技术栈&#xff1a;Vue2Nuxt2TypeScript&#xff0c;是一个服务端渲染的项目&#xff0c;每次打测试包时需要在虚拟机上通过命令行打包项目&#xff0c;然后将打包生成的文件压缩为一个压缩包.tar.gz&#xff0c;然后将这个压缩包下载到本地&#xff0…

免费API HUB行业报告

1. 行业概述 1.1 API HUB定义 API HUB&#xff0c;即应用程序接口中心&#xff0c;是一个集中管理和提供API服务的平台。它允许开发者轻松地访问和集成来自不同来源的API&#xff0c;从而加速开发过程并促进技术创新。 1.2 免费API HUB的特点 免费API HUB通常具有以下特点&…

免费听歌软件b端(但需要下载)

我会觉得很好用所以分享出来供大家使用。 这个事打开后的页面包括可以选择分页&#xff0c;和搜索等 回车可以用上面的搜索图片也可以点机 从前往后呢分别是排序&#xff0c;歌曲id&#xff0c;歌曲名称&#xff0c;歌手&#xff0c;专辑&#xff0c;歌曲长度&#xff0c;操作 …

【算法每日一练】新月轩就餐

思路&#xff1a; 其实很容易想到是双指针或者双端队列。 我们设置一个type表示当前区间已经有了多少种厨师&#xff0c;同时还需要记录区间中每个元素出现的次数&#xff0c;然后比较棘手的是移动问题了&#xff0c;什么时候移动呢&#xff1f; 我们可以发现当区间当队头元…

脂热控制+规律喝水+适量运动,健康减调全攻略

一、控制脂热的摄取量 肥胖大多都是因为身体摄取了多余的脂热而逐渐形成长成的&#xff0c;因此&#xff0c;控制脂热的摄取量就等于是控制了肥胖的涨幅。不了解的&#xff0c;按公式和例举的来就行 油脂量摄取公式&#xff1a;正常人每人每天油脂量摄取每公斤体重数x0.45&am…

【漏洞复现】海康威视综合安防管理平台 orgManage/v1/orgs/download 任意文件读取漏洞

0x01 产品简介 海康威视综合安防管理平台是一套“集成化”、“智能化”的平台,通过接入视频监控、一卡通、停车场、报警检测等系统的设备。海康威视集成化综合管理软件平台,可以对接入的视频监控点集中管理,实现统一部署、统一配置、统一管理和统一调度。 0x02 漏洞概述 海康…

算法学习笔记(7.4)-贪心算法(区间调度问题)

目录 ##什么是区间调度问题 ##贪心解法 ##具体的例题示例讲解 ##452. 用最少数量的箭引爆气球 - 力扣&#xff08;LeetCode&#xff09; ##435. 无重叠区间 - 力扣&#xff08;LeetCode&#xff09; ##56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; ##什么是区间调…

【Go专家编程——语法糖】

语法糖 语法糖表示编程语言中特定类型的语法&#xff0c;这些语法对语言的功能没有影响&#xff0c;但是更方便程序员使用。 1.语法糖: 1.1 规则一&#xff1a;多变量复制可能会重新声明 我们知道可以使用“:”可以同时声明多个变量 field1, offset : nextField(str,0) fi…