Mongodb的数据库简介、docker部署、操作语句以及java应用

news2024/12/25 1:24:28

 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.coloradmin.cn/o/1793680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Technart电动螺丝刀TN101控制器维修

Technart电动螺丝刀以其高效、稳定和精确的扭矩控制而闻名。然而&#xff0c;即使优质的产品&#xff0c;在长时间的使用下&#xff0c;也可能会出现TECHNART电动螺母扳手控制器故障。 常见故障及维修方法 1. 控制器不工作 症状&#xff1a;电动螺丝刀无法启动&#xff0c;或启…

sql注入-布尔盲注

布尔盲注&#xff08;Boolean Blind SQL Injection&#xff09;是一种SQL注入攻击技术&#xff0c;用于在无法直接获得查询结果的情况下推断数据库信息&#xff1b;它通过发送不同的SQL查询来观察应用程序的响应&#xff0c;进而判断查询的真假&#xff0c;并逐步推断出有用的信…

数据库与数据库管理系统 MySQL的安装 SQL语言学习:DDL、DML

day51 数据库 数据库&#xff08;database&#xff09;就是一个存储数据的仓库。为了方便数据的存储和管理&#xff0c;它将数据按照特定的规律存储在磁盘上。 通过数据库管理系统&#xff0c;可以有效地组织和管理存储在数据库中的数据&#xff0c;如数据库管理系统MySQL 数据…

HSC Mailinspector loader.php 任意文件读取漏洞复现(CVE-2024-34470)

0x01 产品简介 HSC Mailinspector是一款远程电子邮件检查工具&#xff0c;支持POP3/IMAP4协议。它允许用户远程扫描最新邮件&#xff0c;并进行浏览、垃圾邮件排除、编辑、删除等操作&#xff0c;无需实际登录邮箱。 0x02 漏洞概述 由于HSC Mailinspector /public/loader.ph…

XM平台的交易模式模式是什么?

外汇交易平台的盈利模式主要分为两种&#xff1a;有交易员平台和无交易员平台。 有交易员平台&#xff0c;也称为做市商平台&#xff0c;为客户提供交易市场&#xff0c;并在需要时与客户持相反方向的交易&#xff0c;从中赚取利润。交易者看到的买入卖出价可能与实际价格不同&…

activiti用法随记

案例&#xff1a; 摘抄于官网&#xff0c;假设我们有如下流程&#xff1a; 流程对应的bpmn文件如下&#xff1a; <definitions xmlns:activiti"http://activiti.org/bpmn" xmlns:bpmndi"http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc&quo…

Java--方法的定义和调用

1.Java的方法类似于其他语言的函数&#xff0c;是一段用来用来完成特定功能的代码片段&#xff0c;一般情况下&#xff0c;定义一个方法包含以下语法&#xff1a; 1.方法包含一个方法头和方法体&#xff0c;。下面是一个方法的所有部分&#xff1a; 1.修饰符&#xff1a;修饰符…

重生奇迹mu战士技能石头在哪打

战士技能石头是靠打怪物&#xff0c;从它们身上掉下来而获得的&#xff0c;战士的技能石头分几种&#xff0c;每种都分布在不同的地方&#xff1a; 1、袭风刺技能石头可以到沙漠之地&#xff0c;通过打尖嘴猪获得。 2、雷霆裂闪技能石头可以到沙漠之地通过打黑暗大师或者破坏…

如何防止线上事故?从一次流水号重复引发的故障说起

最近我负责的系统出了一次生产事故&#xff0c;这次事故竟然是因为流水号重复导致的。今天来给大家分享一下。 1.问题背景 这个流水号的使用场景是上游系统调用下游接口时传入一个唯一 ID&#xff0c;流水号这个参数在联调或定位问题时很方便。 我们系统中的流水号是一个 32…

React权限管理系统实现

目录 一、需求 二、逻辑 三、实现 &#xff08;一&#xff09;代码 &#xff08;二&#xff09;解释 1. 获取权限对照数组 (queryReferencePermissionsInfo) 2. 获取处理对照数组 (queryDisposePermissionsInfo) 3. 获取权限映射表信息并处理 (queryPermissionsInfo) 4…

awdawdawd

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

2024-06-05-记一次cnvd渗透

前言&#xff1a;挖src挖郁闷了&#xff0c;闲来无事选择挖一个cnvd来练练手&#xff0c;本次的漏洞都没啥难度&#xff0c;企查查资产过了5000万 说一下cnvd证书的下放标准 对于中危及中危以上通用型漏洞&#xff08;CVSS2.0基准评分超过4.0分&#xff09;&#xff0c;以及涉…

eclipse添加maven插件

打开eclipse菜单 Help/Install New SoftwareWork with下拉菜单选择 2022-03 - https://download.eclipse.org/releases/2022-03‘type filter text’搜索框中输入 maven选择 M2E - Maven Integration for Eclipse一路next安装&#xff0c;重启eclipseImport项目时&#xff0c;就…

国外视频流量密码!我想要好好的,不要废掉我——早读(逆天打工人爬取热门微信文章解读)

耐心点好吗&#xff1f; 引言Python 代码第一篇 洞见 废掉一个人最隐蔽的方式&#xff1a;陷于底层习惯第二篇 视频信息差结尾 引言 戒骄戒躁 昨天晚上在沙发上睡着了 原因是身体不想睡 神想睡 于是身体躺在沙发上 神就睡着 早上早早就起来 差一点感冒 不过身体在冷水浴 还有呼…

Mac下载Homebrew

通过command空格搜索终端打开 直接输入 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 然后输入电脑密码 然后直接回车等待安装完成 注意⚠️&#xff1a;如果出现报错/opt/homebrew/bin is not in your PATH…

LW-DETR:实时目标检测的Transformer, Apache-2.0 开源可商用,实验超 YOLOv8

LW-DETR&#xff1a;实时目标检测的Transformer&#xff0c; Apache-2.0 开源可商用&#xff0c;实验超 YOLOv8 LW-DETR 架构实例化高效训练高效推理 目的与解法拆解ViT编码器和DETR解码器多级特征图聚合变形交叉注意力窗口注意力和全局注意力 论文&#xff1a;https://arxiv.o…

Vue3实战笔记(57)—一键换肤:在Vuetify中打造个性化主题切换体验

文章目录 前言一键换肤总结 前言 在当今追求极致用户体验的时代&#xff0c;为应用程序提供个性化的主题切换功能已经成为提升用户满意度和留存率的关键因素之一。Vuetify&#xff0c;作为基于Vue.js的流行前端框架&#xff0c;以其丰富的组件库和高度可定制性&#xff0c;为开…

数字影像产业园的三大赋能:科技、创新与无限可能

数字影像产业园作为文创产业的重要载体&#xff0c;以科技为核心驱动力&#xff0c;不断推动产业的技术革新和升级。 园区内汇聚了最前沿的数字技术资源&#xff0c;高清摄影设备、虚拟现实技术、人工智能应用等尖端科技在这里得到广泛应用&#xff0c;不仅提升了生产效率&…

池化层【马赛克】

最大池化&#xff0c;也叫下采样。 公式&#xff1a; 参数&#xff1a; celling的意思&#xff1a; 例子&#xff1a; 尺寸&#xff1a; code: import torchimport torchvision.datasetsfrom tensorboardX import SummaryWriterfrom torch import nnfrom torch.nn import MaxP…

自定义类型:枚举和联合体

在之前我们已经深入学习了自定义类型中的结构体类型 &#xff0c;了解了结构体当中的内存对齐&#xff0c;位段等知识&#xff0c;接下来在本篇中将继续学习剩下的两个自定义类型&#xff1a;枚举类型与联合体类型&#xff0c;一起加油&#xff01;&#xff01; 1.枚举类型 …