二、MongoDB简介及基本操作

news2024/11/21 2:39:40

mongodb是一个基于文档的强大、灵活、易于扩展的通用型数据库。是基于分布式文件存储的数据库。其由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

mongodb也是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

目录

一、MongoDB简介

        1.1 简介

        1.2 基本概念

二、MongoDB常规操作

        2.1 数据库操作

        2.2 集合操作

        2.3 数据类型

        2.4 文档操作


一、MongoDB简介

        1.1 简介

        mongodb是一个基于文档的强大、灵活、易于扩展的通用型数据库。是基于分布式文件存储的数据库。其由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。其主要特点如下:

        (1)其使用文档来替代关系型数据库表的结构,每条数据不在要求其有无和一致性的类型。

        (2)每个文档可以具备丰富的层次结构,而不是并列的属性数据。当然对于检索等情况下也不是很建议这样处理。

        (3)使用横向扩展技术,面向文档的数据模型更易扩展。

        (4)具备更加丰富、独特、易用的检索功能。

        (5)基于内存的储存检索,性能更佳。

        1.2 基本概念

                数据库:

      数据库和传统的关系型数据库差不多的概念,每个数据库含有多个集合,每个数据库最后会作为文件储存至服务器中,另外还有一些特殊的数据库进行了保留如下:

        admin:类似于root数据库,如果将用户添加至admin数据库将获取所有数据库的权限,其中一些比如查找所有数据库、关闭服务器的服务端命令只能从这里运行。

        local:存储当前服务器所有本地集合的数据库,永远不可以复制。

        config:主要是存储分片等信息

                集合(table):

      相当于表结构,一个数据库下有多个集合。

      但是与传统关系型数据库不同,关系型数据库譬如mysql,postgresql等都需要比较确切的表结构,但是对于MongoDB的集合,可以存储不同结构的数据,eg:

        {"name":"张三","age":"15"}

        {"name":"李四","age":16,"height":180}

        {"title":"我的世界"}

     对于上述数据都可以存储在一个集合里面,在该集合的上述三条数据,不仅仅是字段不同,连同一个字段age的数据类型都不同,这边是集合的动态扩展。虽然MongoDB支持该方式,但是作为开发还是建议将不同类型的数据分开到不同的集合之中更为稳妥:

        首先,将各种类型的数据放到同一个数据库之中,后续进行管理查看的时候需要进行针对性的筛选很费劲;

        其次,对于同名但是不同含义的字段检索存在歧义;

        最后补充,在进行数据检索时,包括索引创建等,对于同一类数据进行操作更为快捷,其体现在索引创建上,进行检索时查找数据量级上等。

                文档 (行数据)

      文档则相当于传统关系型数据的行数据,对于集合中的介绍,我们基本也了解到了集合的结构并非是非常固定的结构,但是对于其中还是要注意,文档不能出现相同名称的属性。

                主键

     主键是MongoDB比较特殊的存在,一个mysql表可以不设置主键,但是对于MongoDB是一定会有一个唯一性的Id,你可以使用一个确定的Id值,也可以不进行设置,由MongoDB生成一个唯一的ObjectId作为Id。ObjectId作为的Id可以适配分布式的情况,具体详见官网介绍:ObjectId — MongoDB Manual

二、MongoDB常规操作

        2.1 数据库操作

             2.1.1 查看

                       MongoDB对于数据库的查看 

#推荐
show dbs
#不推荐
show databases

              

             2.1.2 创建

                       对于数据库的创建,MongoDB并未提供一个独立的接口,而是使用类似于mysql这种use <database> 的语法,当使用的数据库不存在时则进行创建

# 切入 test 数据库,此时触发 test 数据库的创建工作
use test
db.myCollection.insertOne( { x: 1 } );

【注】 当只是use <new database> 时,没有进行集合、文档操作,此时不会创建该数据库,只有真正操作集合后才会创建。

             2.1.3 删除

对于数据库的删除,只需要简单的进入到该数据库执行db.dropDatabase()方法即可

# 删除代码执行前最好是进入改数据库后执行  use <database>
db.dropDatabase()

        2.2 集合操作

                2.2.1 集合创建

db.createCollection(name, options)

参数说明:

  • name: 要创建的集合名称
  • options: (可选)参数的集合

options 可以是如下参数:

参数名类型描述
capped布尔(可选)如果为 true,则创建最大容量的集合,如果超出容量capped集合将自动的覆盖旧数据,当设置为true时,则需要指定size参数大小进行设置
autoIndexId布尔(可选)如为 true,自动在 _id 字段创建索引。默认为 false。【3.4版本开始移除该参数,详见[SERVER-19067] Warn at creation that autoIndexId:false is deprecated - MongoDB Jira】
size数值(可选)为固定集合指定一个最大值,即字节数。
如果 capped 为 true,也需要指定该字段。
max数值(可选)指定固定集合中包含文档的最大数量。

[注]在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。

示例:

 1. 直接创建一个集合:

        db.createCollection("<collectionsName>")

2. 创建一个带有options操作的集合:

 db.createCollection("mycol", { capped : true, size : 6142800, max : 10000 } )

3.也可以直接插入数据,这样也会自动创建一个集合

        

db.tutorialspoint.insert({"name" : "tutorialspoint"})

        

                2.2.2 删除集合

集合删除很简单,直接db.<collectionName>.drop()

db.tutorialspoint.drop()

        2.3 数据类型

MongoDB supports many datatypes. Some of them are −

  • String − This is the most commonly used datatype to store the data. String in MongoDB must be UTF-8 valid.

  • Integer − This type is used to store a numerical value. Integer can be 32 bit or 64 bit depending upon your server.

  • Boolean − This type is used to store a boolean (true/ false) value.

  • Double − This type is used to store floating point values.

  • Min/ Max keys − This type is used to compare a value against the lowest and highest BSON elements.

  • Arrays − This type is used to store arrays or list or multiple values into one key.

  • Timestamp − ctimestamp. This can be handy for recording when a document has been modified or added.

  • Object − This datatype is used for embedded documents.

  • Null − This type is used to store a Null value.

  • Symbol − This datatype is used identically to a string; however, it's generally reserved for languages that use a specific symbol type.

  • Date − This datatype is used to store the current date or time in UNIX time format. You can specify your own date time by creating object of Date and passing day, month, year into it.

  • Object ID − This datatype is used to store the document’s ID.

  • Binary data − This datatype is used to store binary data.

  • Code − This datatype is used to store JavaScript code into the document.

  • Regular expression − This datatype is used to store regular expression.

        2.4 文档操作

                2.4.1 新增

1. 使用insert(documents)方法

#单个插入
db.mycol.insert({"name":"张三","age":18})

#多个插入
db.mycol.insert([{"name":"李四","age":18},{"name":"王五"}])

2.  insertOne(document)方法

db.mycol.insertOne({"name":"张三One","age":18})

3. insertMany(documents)方法

 db.mycol.insertMany([{"name":"李四M","age":18},{"name":"王五M"}])

 

                2.4.2 删除

文档删除主要是使用drop方法,但是要注意对于capped collection无法进行删除操作,以下则是进行具体操作的示例,这里先造点数据

db.test.insert([{"name":"李四","age":18},{"name":"王五"},{"name":"赵六","age":18},{"name":"Tom","age":19},{"name":"Anna","age":20}])

示例:

  1. 简单进行条件删除:

db.test.remove({'name':'王五'})

2. 在version2.6 及其后续版本提供了更为复杂的删除方案:

        db.collection.remove(
                  <query>,
                   {
                             justOne: <boolean>,
                             writeConcern: <document>,
                             collation: <document>,
                             let: <document> // Added in MongoDB 5.0
                   }
        )

参数

类型

描述

query

document

使用query operators指定删除条件。要删除集合中的所有文档,请传递空文档({})。

justOne

boolean

可选的。要将删除限制为仅一个文档,请设置为true。省略使用false的默认 value 并删除符合删除条件的所有文档。

writeConcern

document

可选的。表示写关注的文件。省略使用默认写入问题。见写关注。 如果在事务中运行,请不要为操作明确设置写关注点。要对事务使用写关注,请参见 事务和写关注。

collation

document

可选的。 指定要用于操作的排序规则。 排序规则允许用户为 string 比较指定 language-specific 规则,例如字母和重音标记的规则。 排序规则选项具有以下语法: collation:{ locale:<string>, caseLevel:<boolean>, caseFirst:<string>, strength:<int>, numericOrdering:<boolean>, alternate:<string>, maxVariable:<string>, backwards :<boolean> } 指定排序规则时,locale字段是必填字段;所有其他校对字段都是可选的。有关字段的说明,请参阅整理文件。 如果未指定排序规则但集合具有默认排序规则(请参阅db.createCollection()),则操作将使用为集合指定的排序规则。 如果没有为集合或操作指定排序规则,MongoDB 使用先前版本中用于 string 比较的简单二进制比较。 您无法为操作指定多个排序规则。对于 example,您不能为每个字段指定不同的排序规则,或者如果使用排序执行查找,则不能对查找使用一个排序规则,而对排序使用另一个排序规则。 version 3.4 中的新内容。

对于mongodb的基本操作基本讲解完毕,那么下一章节开始介绍如何去查询内容。

上一章:MongoDB安装(CentOS7)_童懵的博客-CSDN博客

下一章:

参考文献:

MongoDB Documentation

MongoDB Tutorial

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

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

相关文章

运动健身买什么耳机好用、最优秀的健身耳机推荐分享

冬天绝对是个减肥的好季节&#xff0c;因为这个季节天气比较冷&#xff0c;我们在运动过程中消耗的热量也就会更多&#xff0c;因此选择一款不错的运动耳机来用坚持就显得尤为重要了。这款运动耳机要能稳定在耳朵上&#xff0c;还要具备防水功能&#xff0c;同时音质上也要有保…

闲人闲谈PS之三十四——项目成本费用控制阈值

**惯例闲话&#xff1a;**最近有小伙伴问闲人有没有PS顾问资源&#xff0c;闲人问了一圈&#xff0c;结果发现都没有档期&#xff0c;不免让闲人有些失落&#xff0c;好心答应帮忙&#xff0c;结果帮不上…但是隐隐约约觉得在几年前说的话被应验了&#xff0c;PS模块一定是个热…

Ubuntu G++ 编译C++源文件

工程项目代码简短的时候使用 G 进行功能模块测试 过程分为&#xff1a; 预处理&#xff1a;展开头文件&#xff0c;去掉主食&#xff0c;条件编译和文件包含编译&#xff1a;检查语法&#xff0c;生成汇编代码汇编&#xff1a;汇编代码转换成机器码链接&#xff1a;Link 主要是…

王学岗音视频开发(一)—————配置NDK开发环境

Android studio准备 Android studio需要下载Android6.0版本(Android SDK Platform 23)&#xff0c;最小支持Android6.0 NDK 下载 cmake下载安装 Android studio 代理配置 dl.google.com可能会被屏蔽&#xff0c;首先查下其IP地址。查到IP地址后修改etc/hosts文件。 Andr…

pytorch深度学习实战lesson25

第二十五课 network in network(NIN) NIN 叫做network in network或者叫做网络中的网络。这个网络现在用的不多&#xff0c;几乎很少被用到。但是它里面提出了比较重要的概念&#xff0c;在之后很多网络都会被持续的用到。所以今天认识一下这一个网络。 目录 理论部分 实践部…

高并发下丢失更新的解决方案

作者&#xff1a;谢益培 1 背景 关键词&#xff1a;并发、丢失更新 预收款账户表上有个累计抵扣金额的字段&#xff0c;该字段的含义是统计商家预收款账户上累计用于抵扣结算成功的金额数。更新时机是&#xff0c;账单结算完成时&#xff0c;更新累计抵扣金额累计抵扣金额账…

ImmunoChemistry艾美捷Annexin V-FITC细胞凋亡检测试剂盒方案

膜联蛋白V是具有血管抗凝血活性的钙和磷脂结合蛋白家族的成员。体外实验结果表明&#xff0c;它可能通过与凝血酶原竞争磷脂酰丝氨酸&#xff08;PS&#xff09;结合位点而在抑制凝血中发挥作用。在健康细胞中&#xff0c;PS通常保存在细胞膜的内小叶&#xff08;胞质侧&#x…

网络是怎样连接的--TCP大致控制流程

文章目录5.1 协议栈内部结构5.2 套接字作用5.3 创建套接字5.4 两类控制信息5.5 连接操作的实际过程5.6 收发数据5.6.1将http请求消息发给协议栈5.6.2 注意对较大数据进行拆分5.6.3 序号和ACK5.6.4 等待超时时间5.6.5 窗口机制提升效率5.6.6 ACK与窗口合并5.7 断开连接5.8 删除套…

MCE | 新冠 德尔塔病毒

冠状病毒&#xff0c;其表面有突出的棒状尖峰&#xff0c;在电镜下可以观察到像王冠一样的放射状凸起而得名。冠状病毒的基本结构如图 1 所示&#xff0c;包括刺突糖蛋白 (S)、包膜 (E)、膜 (M) 和核衣壳 (N)。 图 1. 冠状病毒结构2020 年石正丽教授在 Nature 发表的论文 A …

浅识JVM

⭐️前言⭐️ 本篇文章&#xff0c;博主分享的是在面试中JVM常考的考点&#xff0c;希望这篇文章能够对你有用。 &#x1f349;博客主页&#xff1a; &#x1f341;【如风暖阳】&#x1f341; &#x1f349;精品Java专栏【JavaSE】、【备战蓝桥】、【JavaEE初阶】、【MySQL】、…

多维度比对三种软件开发方式后,无代码开发到底赢在哪?

近年来受信息化、数字化和 5G、云计算发展的影响&#xff0c;以及企业管理的不确定性和复杂性增加&#xff0c;国内管理软件的需求及行业市场整体规模也连年高速增长&#xff0c;进而带动了管理软件开发方式的变革。 但是由于传统自主及外包开发方式存在的周期长、成本高、不能…

DataX二次开发——(9)新增s3reader和s3writer模块

1 背景 DataX3.0支持阿里的OSS的读写&#xff0c;但没支持S3的读写&#xff0c;虽然OSS的也是基于S3协议去做二开的&#xff0c;但是一些参数有点区别&#xff0c;所以按照阿里的OSSReader和OSSWriter开发了S3Reader和S3Writer。 2 代码开发 2.1 s3reader 2.1.1 项目结构 2…

pytorch快速上手(8)-----pytorch优化器简介

文章目录一、简介二、optimizer属性方法1. zero_grad()2. step()3. add_param_group()4. state_dict()5. load_state_dict()学习率动量三、常见优化器介绍1. BGD&#xff08;Batch Gradient Descent&#xff09;2. Stochastic Gradient Descent&#xff08;SGD&#xff09;3. M…

记录一次因执行时间过长锁已经释放导致finally块再次unlock引发的异常

一、前言 因为我的一个需求需要请求一个耗时比较长的接口&#xff08;耗时长其实是对接方的锅&#xff09;&#xff0c;该接口交给了Spring事务管理&#xff0c;并且使用了分布式锁&#xff0c;但是在请求的时候&#xff0c;出现error,看日志发现是unlock的时候没有锁可以去解…

牛客网语法篇练习复合类型(二)

1.输入NxM矩阵&#xff0c;矩阵元素均为整数&#xff0c;计算其中大于零的元素之和。 a,b map(int,input().split()) list1 [] sum 0 for i in range(a):list1.extend(list(map(int,input().split()))) for i in list1:if i>0:sumi print(sum) 2.给你一个整数n&#xff…

辨别代码能否引发线程安全问题--避免在平时写代码时引发线程安全问题

前景提要&#xff1a; 本篇文章只是入门&#xff0c;目的在于在脑海中构建一个Java运行的模型&#xff0c;然后可以在平时写代码时对是否引发线程安全问题有感知。 文章目录引入了解辨别线程安全问题之前先来构建一个计算机运行模型了解线程安全问题怎么能不知道线程和进程了解…

搭建repo服务器管理多个git工程

参考自&#xff1a;搭建repo服务器管理多个git工程     repo系列讲解 —— Android系统源码(AOSP)下载 1、repo介绍 Android使用git作为代码管理工具&#xff0c;开发了gerrit进行代码审核&#xff0c;以便更好的对代码进行集中式管理。还开发了repo命令行工具&#xff0…

MySQL8.0 binlog进阶

MySQL8.0经过这几年的操揉磨治&#xff0c;已经上升到海平面了。其中binlog也悄然无声带来了不一样的变化。高可用核心复制基础binlog变化更应该进一步了解。从参数入手&#xff0c;了解带来的变化。 slave回放算法 slave_rows_search_algorithms 当使用基于 row-based复制格…

牛客网语法篇练习循环控制(二)

1.今天牛牛学到了回文串&#xff0c;他想在数字里面找回文&#xff0c;即回文数&#xff0c;回文数是正着读与倒着读都一样的数&#xff0c;比如1221&#xff0c;343是回文数&#xff0c;433不是回文数。请输出不超过n的回文数。 a int(input()) for i in range(1,a1):n str…

CSS-counter 计数器详细教程+使用场景示例

counter一. counter计数器二. 属性和方法1. 计数器命名/重置2. 计数器-值递增规则3. 计数器显示 counter() / counters() 函数三 代码示例1. 重新开始计数2. counters嵌套使用3. 借助CSS计数器呈现CSS var变量值一. counter计数器 计数器是一种特殊的数字跟踪器&#xff0c;通常…