MongoDB实践

news2024/11/15 18:06:44

MongoDB学习

MongoDB简介

MongoDB 是一种流行的文档型 NoSQL 数据库,它具有以下特点和应用场景:

文档型数据库:MongoDB 使用 BSON(Binary JSON)格式的文档来存储数据。每个文档可以具有不同的字段,这使得数据模型非常灵活。

横向扩展:MongoDB 具有良好的横向扩展性,能够轻松应对大规模数据和高吞吐量的需求。

查询语言:MongoDB 提供强大的查询语言,支持丰富的查询操作,包括嵌套查询、数组查询和地理空间查询。

复制和故障转移:MongoDB 支持数据复制和自动故障转移,提供高可用性和数据冗余。

地理位置数据:MongoDB 提供用于地理位置数据的内置支持,适用于地理信息系统(GIS)应用。

适用场景:MongoDB 适用于大数据、实时分析、内容管理系统、日志记录、物联网(IoT)等非结构化或半结构化数据应用。

Redis简介

Redis(Remote Dictionary Server)是另一种非常流行的 NoSQL 数据存储系统,但它与 MongoDB 有一些重要的区别:

数据模型:Redis 是一个键值存储数据库,用于存储键值对,其中值可以是字符串、列表、集合、哈希表等。MongoDB 是文档型数据库,数据以文档的形式存储,具有更复杂的结构。

持久性:Redis 的默认配置通常不是持久性的,而 MongoDB 提供了更强大的数据持久性支持。

查询语言:Redis 不提供类似 SQL 的查询语言,数据操作通常是基于键的。MongoDB 提供了更强大的查询语言和过滤条件。

数据大小:Redis 通常用于缓存和快速数据检索,不适合存储大型文档或大数据集。MongoDB 更适合大型数据存储。

Redis与MongoDB两者区别总结

总结而言,Redis 和 MongoDB 针对不同的用例和数据模型而设计。它们通常不是互相替代的,而是用于不同的数据存储需求。Redis 适用于缓存、会话存储、消息队列等场景,而 MongoDB 适用于存储非结构化或半结构化的大型文档数据。根据您的项目需求,您可以选择使用其中一个或两者结合来满足不同的数据存储需求。

MySQL和MongoDB对比

在这里插入图片描述

MongoDB实践

我的文件位置:C:\Demos\mongodb\mongodbStudy\mongodbSource\MongoDB\mongodb-win32-x86_64-2008plus-ssl-4.0.12\mongodb-win32-x86_64-2008plus-ssl-4.0.12
解压mongodb文件夹,新建data和config文件夹
在这里插入图片描述
在config文件下,新建一个mongod.conf
在这里插入图片描述

storage:
 #The directory where the mongod instance stores its data.Default Value is "/data/db" on Windows.
 dbPath: C:\Demos\mongodb\mongodbStudy\mongodbSource\MongoDB\mongodb-win32-x86_64-2008plus-ssl-4.0.12\mongodb-win32-x86_64-2008plus-ssl-4.0.12\data

桌面建一个1.bat,写一个脚本启动mongoDB,下面就是我的mongodb的地址,进入bin目录启动

cd /d C:\Demos\资料-mongodb基础到进阶\01_MongoDB用起来-快速上手\04_资源\MongoDB软件\mongodb-win32-x86_64-2008plus-ssl-4.0.12\mongodb-win32-x86_64-2008plus-ssl-4.0.12\bin
start mongod -f ..\config\mongod.conf

可视化工具

在这里插入图片描述

使用MongoDB

1、 连接到 MongoDB 数据库:

使用 MongoDB 的客户端(如官方的 MongoDB Shell 或 MongoDB Compass)连接到数据库,或者在应用程序中使用适当的库连接到数据库。

2、创建数据库:

创建数据库:
在 MongoDB 中,数据库是按需创建的,不需要显式创建数据库。要切换到特定数据库或使用特定数据库,可以使用以下命令:

use mycollection

这将切换到名为 “mycollection” 的数据库,如果不存在,MongoDB 将自动创建它。

插入文档:
插入文档使用 insert 命令或 insertOne 和 insertMany 方法。

db.mycollection.insert({ name: "John", age: 30 })

查询文档:
查询文档使用 find 命令。

db.mycollection.find({ name: "John" })

更新文档:
更新文档使用 update 命令或 updateOne 和 updateMany 方法。

db.mycollection.update({ name: "John" }, { $set: { age: 31 } })

删除文档:
删除文档使用 remove 命令或 deleteOne 和 deleteMany 方法。

db.mycollection.remove({ name: "John" })

Spring Boot 整合 MongoDB:

在 Spring Boot 中,您可以使用 Spring Data MongoDB 来轻松地进行数据库操作。以下是一个示例,演示如何在 Spring Boot 项目中整合 MongoDB:

添加依赖:
首先,您需要在项目的 pom.xml 文件中添加 Spring Data MongoDB 的依赖:

<dependencies>
    <!-- 其他依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
</dependencies>

配置 MongoDB 连接:

spring:
  #数据源配置
  data:
    mongodb:
      # 主机地址
      host: localhost
      # 数据库
      database: articledb
      # 默认端口是27017
      port: 27017

创建实体类:
创建与文档对应的实体类,使用 @Document 注解指定集合名。

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "mycollection")
public class MyDocument {
    @Id
    private String id;
    private String name;
    private int age;
    // Getters and setters
}

创建 Repository:
创建一个继承自 MongoRepository 的接口,用于进行 CRUD 操作。

import org.springframework.data.mongodb.repository.MongoRepository;

public interface MyDocumentRepository extends MongoRepository<MyDocument, String> {
    List<MyDocument> findByName(String name);
}

使用 Repository 进行操作:
在服务类或控制器中,注入 MyDocumentRepository 并使用它进行数据库操作。

@Service
public class MyService {
    @Autowired
    private MyDocumentRepository repository;

    public MyDocument saveDocument(MyDocument document) {
        return repository.save(document);
    }

    public List<MyDocument> findDocumentsByName(String name) {
        return repository.findByName(name);
    }

    // 其他操作
}

这就是在 Spring Boot 中整合 MongoDB 的基本步骤。您可以使用自动生成的 Repository 接口轻松进行 CRUD 操作,并利用 Spring Data MongoDB 的强大功能来处理数据访问。
对于高级一点的模板,

    @Autowired
    private MongoTemplate mongoTemplate;
    public void updateCommentLikenum(String id){

        //  查询条件
        Query query = Query.query(Criteria.where("_id").is(id));
        //  更新条件
        Update update = new Update();
        update.inc("likenum");
        mongoTemplate.updateFirst(query,update,Comment.class);
    }

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

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

相关文章

山西电力市场日前价格预测【2023-10-12】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-10-12&#xff09;山西电力市场全天平均日前电价为506.23元/MWh。其中&#xff0c;最高日前电价为841.91元/MWh&#xff0c;预计出现在18: 30。最低日前电价为351.76元/MWh&#xff0c;预计…

关键词搜索速卖通商品列表接口,速卖通商品列表数据接口

在网页抓取方面&#xff0c;可以使用 Python、Java 等编程语言编写程序&#xff0c;通过模拟 HTTP 请求&#xff0c;获取速卖通网站上的商品页面。在数据提取方面&#xff0c;可以使用正则表达式、XPath 等方式从 HTML 代码中提取出有用的信息。值得注意的是&#xff0c;速卖通…

PowerDesinger导入保险业excel数据模型(代码亲测可用)

一、Excel表 按如下结构填充建表所需的数据(附 Excel 表模板): 二、PowerDesigner 新建模型 点击:File——>New Model——>Model types——>Physical Data Mode 三、PowerDesigner 导入 Excel 脚本 按住Ctrl+Shift+X进入脚本运行界面,导入以下脚本并运行: 注…

牛客 明明的随机数

HJ3 明明的随机数 原题思路代码运行截图收获 原题 HJ3 明明的随机数 思路 如果是C的话直接用set结构体就可以自动排序GO&#xff1a;用一个501的数组存储是否出现&#xff0c;最后从头开始输出出现过的数字 代码 #include <iostream> #include <set> using na…

css怎么实现文字描边

有时&#xff0c;我们会遇到UI稿有文字描边的效果&#xff0c;比如下图的效果。 一、给需要描边的文字加一个id选择器 例如&#xff1a; 二、css写法&#xff1a; number,{//这个是实现文字描边的关键&#xff0c;也就是‘空心文字’&#xff0c;这个是定义文字字符的描边的宽…

向量的运算

向量加法 实质是坐标加法。如下图&#xff1a; 向量减法 实质是坐标减法。如下图&#xff1a; 向量乘法 分为点乘和叉乘&#xff0c;点乘是计算平行四边形的面积&#xff0c;叉乘是计算投影&#xff0c;点乘为标量&#xff0c;叉乘为向量。

Git 使用技巧:5个提高效率的命令,不再只会pull和push

前言 使用 Git 作为代码版本管理&#xff0c;早已是现在开发工程师必备的技能。可大多数工程师还是只会最基本的保存、拉取、推送&#xff0c;遇到一些commit管理的问题就束手无策&#xff0c;或者用一些不优雅的方式解决。 本文分享我在开发工作中实践过的实用命令。这些都能…

【1】MongoDB的安装以及连接

今天是2023年10月11日&#xff0c;MongoDB最新版本是7.0.2 最近闲着没事学习一下MongoDB这个NoSQL数据库&#xff0c;有时间就顺手记录一下我学习的笔记吧~ 学习笔记来自黑马程序员《MongoDB基础入门到高级进阶&#xff0c;一套搞定mongodb》 配套资料&#xff1a;点此资料链接…

Android 面经总结分享(相当走心)

背景描述 这是来自一位粉丝朋友的面经分享&#xff0c;他在 「Android 开发行业」 摸爬滚打5年多的开发&#xff0c;呆过的互联网公司有三家&#xff0c;均从事的Android 开发的工作。最后离职的一家公司也是做的最久的一家&#xff0c;工作了将近3年多时光。 废话不多说了&a…

机器学习 - 似然函数:概念、应用与代码实例

目录 一、概要二、什么是似然函数数学定义似然与概率的区别重要性举例 三、似然函数与概率密度函数似然函数&#xff08;Likelihood Function&#xff09;定义例子 概率密度函数&#xff08;Probability Density Function, PDF&#xff09;定义 区别与联系 四、最大似然估计&am…

Haskell网络编程:从数据采集到图片分析

概述 爬虫技术在当今信息时代中发挥着关键作用&#xff0c;用于从互联网上获取数据并进行分析。本文将介绍如何使用Haskell进行网络编程&#xff0c;从数据采集到图片分析&#xff0c;为你提供一个清晰的指南。我们将探讨如何使用亿牛云爬虫代理来确保高效、可靠的数据获取&am…

写爬虫?前端er何必用python

前言 说起网络爬虫,很多人第一时间想到python,但爬虫并非只能用python实现,虽然网上大部分爬虫文章都在说python爬虫,但对于前端程序员来说,我觉得js才是最屌的(对于简单爬取任务来说,复杂的我暂时没碰到~),下面说说我的经验(是的,仅限本人经验),希望能给各位前…

Qt 常用控件按钮Button 案例分析

目录 常用控件按钮 1.QPushButton 2.QToolButton 3.QRadioButton 4.QCheckBox 5.QCommandLinkButton 6.QDialogButtonBox 常用控件按钮 Push Button: 命令按钮。 Tool Button:工具按钮。 Radio Button:单选按钮。 Check Box: 复选框按钮 Command Link Button: 命今链…

2023年中国自动化微生物样本处理系统竞争现状及行业市场规模分析[图]

微生物检测能够对感染性疾病的病原体或者代谢物进行检测分析&#xff0c;是IVD的细分领域之一。2022年中国体外诊断市场规模1424亿元。 2015-2022年中国体外诊断市场规模 资料来源&#xff1a;共研产业咨询&#xff08;共研网&#xff09; 微生物检测由于样本类型多样&#xf…

HttpServletResponse对象

1.介绍 在Servlet API中&#xff0c;定义了一个HttpServletResponse接口&#xff0c;它继承自ServletResponse接口&#xff0c;专门用来封装HTTP响应消息。由于HTTP响应消息分为状态行、响应消息头、消息体三部分&#xff0c;因此&#xff0c;在HttpServletResponse接口中定义…

Netty RPC 实现

1 概念 RPC&#xff0c;即 Remote Procedure Call&#xff08;远程过程调用&#xff09;&#xff0c;调用远程计算机上的服务&#xff0c;就像调用本地服务一样。RPC 可以很好的解耦系统&#xff0c;如 WebService 就是一种基于 Http 协议的 RPC。这个 RPC 整体框架如下&#…

优盘中毒了怎么办?资料如何恢复

在现代社会中&#xff0c;优盘成为我们日常生活与工作中必备的便携式存储设备。然而&#xff0c;正是由于其便携性&#xff0c;优盘也成为病毒感染的主要目标之一。本篇文章将帮助读者了解如何应对优盘中毒的情况&#xff0c;以及如何恢复因病毒感染丢失的资料。 ▶优盘为什么…

【Java】 DirectByteBuffer堆外内存回收

PhantomReference虚引用 在分析堆外内存回收之前&#xff0c;先了解下PhantomReference虚引用。 PhantomReference需要与ReferenceQueue引用队列结合使用&#xff0c;在GC进行垃圾回收的时候&#xff0c;如果发现一个对象只有虚引用在引用它&#xff0c;则认为该对象需要被回…

nvm的简介、安装、使用(简单明了)

一、nvm是什么&#xff1f; nvm是一个node的版本管理工具&#xff0c;可以简单操作node版本的切换、安装、查看。。。等等&#xff0c;与npm不同的是&#xff0c;npm是依赖包的管理工具。 二、nvm的安装。 1、windows包下载地址&#xff1a; 2、点击如下文件进行安装&#…

配置接口策略路由

【微|信|公|众|号&#xff1a;厦门微思网络】 【微思网络www.xmws.cn&#xff0c;成立于2002年&#xff0c;专业培训21年&#xff0c;思科、华为、红帽、ORACLE、VMware等厂商认证及考试&#xff0c;以及其他认证PMP、CISP、ITIL等】 组网需求 如图1所示&#xff0c;缺省情况下…