一文解决MongoDB数据库的基础操作

一、MongoDB简介

MongoDB是一种强大、灵活、可扩展的数据存储方式。它扩展了关系型数据库的众多有用功能,如辅助索引、范围查询(range query)和排序。MongoDB的功能非常丰富,比如内置的对MapReduce式聚合的支持,以及对地理空间索引的支持。要是不能用的话,再牛的技术也是空谈,MongoDB致力于容易上手、便于使用。MongoDB的数据模型对开发者来说非常友好,配置选项对于管理员来说也很轻松,并且有驱动程序和数据库shell提供的然语言式的API。MongoDB会为你扫除障碍,让你关注编程本身而不是为存储数据烦恼。

百度的简介:

mongodb是一个基于分布式文件存储的数据库,由C++语言编写。
它旨在为WEB应用提供可扩展的高性能数据存储解决方案,最大的特点是支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
一个介于关系数据库和非关系数据库之间的产品

丰富的数据模型

MongoDB是面向文档的数据库,不是关系型数据库。放弃关系模型的主要原因就是为了获得更加方便的扩展性,当然还有其他好处。
基本的思路就是将原来“行”(row)的概念换成更加灵活的“文档”(document)模型。面向文档的方式可以将文档或者数组内嵌进来,所以用一条记录就可以表示非常复杂的层次关系。使用面向对象语言的开发者恰恰这么看待数据,所以感觉非常自然。MongoDB没有模式:文档的键不会事先定义也不会固定不变。由于没有模式需要更改,通常不需要迁移大量数据。不必将所有数据都放到一个模子里面,应用层可以处理新增或者丢失的键。这样开发者可以非常容易地变更数据模型。

容易扩展

应用数据集的大小在飞速增加。传感器技术的发展、带宽的增加,以及可连接到因特网的手持设备的普及使得当下即便很小的应用也要存储大量数据,量大到很多数据库都应付不来。T级别的数据原来是闻所未闻的,现在已经司空见惯了。由于开发者要存储的数据不断增长,他们面临一个非常困难的选择:该如何扩展他们的数据库?升级呢(买台更好的机器),还是扩展呢(将数据分散到很多机器上)?升级通常是最省力气的做法,但是问题也显而易见大型机一般都非常昂贵,最后达到了物理极限的话花多少钱都买不到更好的机器。对于大多数人希望构建的大型Web应用来说,这样做既不现实也不划算。而扩展就不同了,不但经济而且还能持续添加:想要增加存储空间或者提升性能,只需要买台一般的服务器加入集群就好了。MongoDB从最初设计的时候就考虑到了扩展的问题。它所采用的面向文档的数据模型使其可以自动在多台服务器之间分割数据。它还可以平衡集群的数据和负载,自动重排文档。这样开发者就可以专注于编写应用,而不是考虑如何扩展。要是需要更大的容量,只需在集群中添加新机器,然后让数据库来处理剩下的事。

丰富的功能

很难界定什么才算作一个功能:上面提及的算是功能吗?关系型数据库做不到的算吗?都可以说Memcached 做不到的呢?其他面向文档的数据库做不到的又如何呢?但无论界定的标准是什么,都可以说MongoDB拥有一些真正独特的、好用的工具,其他方案不具备或不完全具备这些工具。

索引

MongoDB支持通用辅助索引,能进行多种快速查询,也提供唯-一的、复合的和地理空间索引能力。

存储JavaScript

开发人员不必使用存储过程了,可以直接在服务端存取JavaScript的函数和值。

聚合

MongoDB支持MapReduce和其他聚合工具。

固定集合

集合的大小是有上限的,这对某些类型的数据(比如日志)特别有用。

文件存储

MongoDB支持用一种容易使用的协议存储大型文件和文件的元数据。有些关系型数据库的常见功能MongoDB并不具备,比如联接(join)和复杂的多
行事务。这个架构上的考虑是为了提高扩展性,因为这两个功能实在很难在一个分布式系统上实现。

不牺牲速度

卓越的性能是MongoDB的主要目标,也极大地影响了设计上的很多决定。MongoDB使用MongoDB传输协议作为与服务器交互的主要方式(与之对应的协议需要更多的开销,如HTTP/REST)。它对文档进行动态填充,预分配数据文件用空间换取性能的稳定。默认的存储引擎中使用了内存映射文件,将内存管理工作交给操作系统去处理。动态查询优化器会“记住”执行查询最高效的方式。总之,MongoDB在各个方面都充分考虑了性能。虽然MongoDB功能强大,尽量保持关系型数据库的众多特性,但是它并不是要具备所有的关系型数据库的功能。它尽可能地将服务器端处理逻辑交给客户端(由驱动程序或者用户的应用程序处理)。这样精简的设计使得MongoDB获得了非常好的性能。

简便的管理

MongoDB尽量让服务器自治来简化数据库的管理。除了启动数据库服务器之外,几乎没有什么必要的管理操作。如果主服务器挂掉了,MongoDB会自动切换到备份服务器上,并且将备份服务器提升为活跃服务器。在分布式环境下,集群只需要知道有新增加的节点,就会自动集成和配置新节点。MongoDB的管理理念就是尽可能地让服务器自动配置,让用户能在需要的时候调整设置(但不强制)。

其他内容

在本书中,我们还会花些时间追溯一下在开发MongoDB的过程中一些决定的原因和动机,希望通过这种方式来阐释MongoDB的理念.毕竟,MongoDB的愿景是对自身最好的诠释–建立一种灵活、高效、易于扩展、功能完备的数据库.

二、MongoDB的基础知识

在这里插入图片描述
mongodb安装包与Studio-3T工具:
链接:https://pan.baidu.com/s/1anTFjxjWMz3TQW1P_H9wJg
提取码:k779
具体安装和激活过程请百度吧(^_−)☆

三、MongoDB的简单使用

1、连接mongodb

mongodb的使用方式是客户服务器模式,即使用一个客户端连接mongodb数据库(服务端)。

(1)、命令格式

mongodb://[username:password@]host1[ :port1][,host2[ :port2],… .[ ,hostN[ :portN]]][/[database][?options]]
mongodb://固定前缀
username:账号,可不填
password:密码,可不填
host:主机名或ip地址,只有host主机名为必填项。
port:端口,可不填,默认27017
/database:连接某一个数据库
?options:连接参数,key/value对

例子∶

mongodb://localhost连接本地数据库27017端口
mongodb: / /root:itcast@localhost使用用户名root密码为itcast连接本地数据库27017端口
mongodb://localhost,localhost:27018,localhost:27019,连接三台主从服务器,端口为27017、27018、27019

(2)、MongoDB的连接
I 、使用mongodb自带的javascript shell(mongo.exe)连接

进入MongoDB下的bin目录,启动mongo.exe:
在这里插入图片描述
咦!!!报错了,啥也别说,百度就对了,查找完后就有了如下解决操作:
在这里插入图片描述

在该目录下创建一个mongo.config文件,并配置相对应的内容:
在这里插入图片描述

然后就可以启动该文件了,注意:启动后,不能关闭,要一直开着
在这里插入图片描述

最后就可以继续一开始报错的操作了
在这里插入图片描述

这样就启动成功啦(~ ̄▽ ̄)~

II、Studio-3T连接

上面的连接是使用客服端工具连接的,下面便是用Studio-3T工具进行连接
在这里插入图片描述

这又是什么鬼,居然连接失败了,以刚才的经验,不用想启动mongo.config文件
在这里插入图片描述

具体为啥我就没探究了,如果你知道希望可以告诉我[]( ̄▽ ̄)*

III、Java连接

详细参数:http://mongodb.github.io/mongo-java-driver/3.4/driver/tutorials/connect-to-mongodb/
添加依赖pom.xml:

<dependency> 
	<groupId>org.mongodb</groupId> 
	<artifactId>mongo‐java‐driver</artifactId> 
	<version>3.4.3</version> 
</dependency>

测试程序:

public class testMongoDB {
    @Test
    public void testConnection() {
        //创建mongodb客服端
        MongoClient mongoClient = new MongoClient("localhost", 27017);
        //或者采用了解字符串
        /*
            MongoClientURL connectionString = new MongoClientURL("mongodb://root:root@localhost:27017");
            MongoClientURL mongoClient = new MongoClient(connectionString);
        */
        //连接数据库
        MongoDatabase database = mongoClient.getDatabase("test");
        //连接collection
        MongoCollection<org.bson.Document> collection = database.getCollection("student");
        //查询第一个文档
        Document myDoc = collection.find().first();
        //得到文件内容json串
        String json = myDoc.toJson();
        System.out.println(json);
    }
}

以上便是连接mongodb数据库的三种方式,既然连接成功了我们便进行操作mongodb数据库

(3)、操作数据库

1、查询数据库

show dbs 查询全部数据库
db 显示当前数据库

在这里插入图片描述

2、创建数据库
命令格式:

use DATABASE_NAME

例子: use test02 有test02数据库则切换到此数据库,没有则创建。
注意: 新创建的数据库不显示,需要至少包括一个集合。
在这里插入图片描述

3、删除数据库(慎用!!!)
命令格式:
例子: 删除test02数据库
先切换数据库: use test02
再执行删除: db.dropDatabase()
在这里插入图片描述

集合
集合相当于关系数据库中的表,一个数据库可以创建多个集合,一个集合是将相同类型的文档管理起来。
1、创建集合

db.createCollection(name, options)
name: 新创建的集合名称
options: 创建参数

在这里插入图片描述

2、删除集合

db.collection.drop()

例子: db.student.drop() 删除student集合
在这里插入图片描述
以上便是使用mongodb自带的javascript shell(mongo.exe)连接与简单操作,当然直接使用Studio-3T操作起来更加简便。

2、文档

文档是MongoDB的核心概念。多个键及其关联的值有序地放置在一起便是文档。每种编程语言表示文档的方法不太一样,但大多数编程语言都有相通的–种数据结构,比如映射、散列或字典。例如,在JavaScript里面,文档表示为对象:
{“greeting” : “Hello,world!”}
这个文档只有一个键"greeting",其对应的值为"Hello, world!"。绝大多数情况下,文档会比这个简单的例子复杂得多,经常会包含多个键/值对:
{“greeting” : “Hello, worldl” ,“num” : 520}

(1)、插入文档

mongodb中文档的格式是json格式,下边就是一个文档,包括两个key:_id主键和name

{
	 "_id" : ObjectId("5f6ee646b5e817fb96ffe5d1"), 
	 "name" : "一个爱运动的程序员" 
	 "age":20
 }

插入命令:

db.COLLECTION_NAME.insert(document)

每个文档默认以_id作为主键,主键默认类型为ObjectId(对象类型),mongodb会自动生成主键值。
例子:

db.student.insert({“name”:“一个爱运动的程序员”,“age”:20})

在这里插入图片描述
在Studio-3T中查看:
在这里插入图片描述

注意: 同一个集合中的文档的key可以不相同!但是建议设置为相同的。

(2)、更新文档

命令格式:

db.collection.update( 
	<query>, 
	<update>, 
	<options> 
)

query: 查询条件,相当于sql语句的where
update: 更新文档内容
options: 选项

I、替换文档

将符合条件 “name”:"一个爱运动的程序员"的第一个文档替换为{“name”:“猪头”,“age”:20}。

db.student.update({“name”:“一个爱运动的程序员”},{“name”:“猪头”,“age”:20})

在这里插入图片描述
在这里插入图片描述

II、$set修改器

使用$set修改器指定要更新的key,key不存在则创建,存在则更新。 将符合条件 “name”:"猪头"的所有文档更新name和age的值。

db.student.update({“name”:“一个爱运动的程序员”},{$set:{“name”:“猪头”,“age”:20}},{multi:true})

multi:false表示更新第一个匹配的文档,true表示更新所有匹配的文档。

(3)、删除文档

命令格式:

db.student.remove()
query:删除条件,相当于sql语句中的where

I、删除所有文档

db.student.remove({})

II、删除符合条件的文档

db.student.remove({“name”:“猪头”})

(4)、查询文档

命令格式:

db.collection.find(query, projection)
query:查询条件,可不填
projection:投影查询key,可不填

I、查询全部

db.student.find()

II、查询符合条件的记录

查询name等为"猪头"的文档。

db.student.find({“name”:“猪头”})

III、投影查询

只显示name和age两个key,_id主键不显示。

db.student.find({“name”:“猪头”},{name:1,age:1,_id:0})

而在Studio-3T里的查询:
在这里插入图片描述

3、用户

前面的操作,我们是没有进行认证登录的

(1)、创建用户

语法格式:

mongo>db.createUser(
{   user: "<name>",
	pwd: "<cleartext password>", 
	customData: { <any information> }, 
	roles: [ 
		{ role: "<role>", db: "<database>" } | "<role>", 
		... 
	]} 
)

例子:
创建root用户,角色为root

use admin 
db.createUser( 
	{ 
		user:"root", 
		pwd:"123456", 
		roles:[{role:"root",db:"admin"}] 
	} 
)

在这里插入图片描述
在Studio-3T查看:
在这里插入图片描述

内置角色如下:

  1. 数据库用户角色:read、readWrite;
  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  4. 备份恢复角色:backup、restore;
  5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、 dbAdminAnyDatabase
  6. 超级用户角色:root
(2)、认证登录

为了安全需要,Mongodb要打开认证开关,即用户连接Mongodb要进行认证,其中就可以通过账号密码方式进行 认证。
1、在mongo.conf中设置 auth=true
在这里插入图片描述

2、重启Mongodb
3、使用账号和密码连接数据库
1)mongo.exe连接

mongo.exe ‐u root ‐p 123456 ‐‐authenticationDatabase admin

2)Studio 3T连接
在这里插入图片描述

(3)、查询用户

查询当前库下的所有用户:

show users

(4)、删除用户

语法格式:

db.dropUser(“用户名”)

例子:
删除test1用户

db.dropUser(“test1”)

(5)、修改用户

语法格式:

db.updateUser( 
	"<username>", 
	{ 
	customData : { <any information> }, 
	roles : [ 
		{ role: "<role>", db: "<database>" } | "<role>", 
		... 
	], 
	pwd: "<cleartext password>" 
	},
	writeConcern: { <write concern> })

例子:
先创建test1用户:

db.createUser( 
{ 
	user:"test1", 
	pwd:"test1", 
	roles:[{role:"root",db:"admin"}] 
	} 
)

修改test1用户的角色为readWriteAnyDatabase

use admin
db.updateUser(“test1”,{roles:[{role:“readWriteAnyDatabase”,db:“admin”}]})

(6)、修改密码

语法格式:

db.changeUserPassword(“username”,“newPasswd”)

例子:
修改test1用户的密码为123

use admin
db.changeUserPassword(“test1”,“123”)

以上便是关于MongoDB数据库的简单基础入门ヾ(◍°∇°◍)ノ゙

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MongoDB数据库的基本操作包括以下内容: 1. 连接数据库:使用MongoDB客户端连接数据库,可以使用命令行工具或者图形化界面。 2. 创建数据库:使用MongoDB客户端创建数据库,可以使用命令行工具或者图形化界面。 3. 创建集合:在MongoDB数据库中,数据存储在集合中,使用MongoDB客户端创建集合,可以使用命令行工具或者图形化界面。 4. 插入数据:使用MongoDB客户端向集合中插入数据,可以使用命令行工具或者图形化界面。 5. 查询数据:使用MongoDB客户端查询集合中的数据,可以使用命令行工具或者图形化界面。 6. 更新数据:使用MongoDB客户端更新集合中的数据,可以使用命令行工具或者图形化界面。 7. 删除数据:使用MongoDB客户端删除集合中的数据,可以使用命令行工具或者图形化界面。 以上就是MongoDB数据库的基本操作,掌握这些操作可以帮助我们更好地使用MongoDB数据库。 ### 回答2: MongoDB是一个开源的文档数据库,采用类JSON格式的BSON作为数据存储的格式。MongoDB的数据模型是面向文档的,它将数据存储在类似于JSON的BSON格式文件中,这使得非结构化的数据非常容易存储和查询。MongoDB是跨平台的,可以在Windows、Linux、Mac等各种操作系统上运行。MongoDB具有高可扩展性、高性能、高可靠性等优点,在各种场景下都有广泛的应用。 MongoDB数据库基本操作: 1.安装MongoDB 在安装MongoDB之前,需要确认系统中是否已有MongoDB,如果已经安装则可以跳过此步骤。 在官网http://www.mongodb.org/downloads下载MongoDB版本,然后解压到指定目录。然后可以启动mongod,服务器端的进程。mongod可以通过命令行和配置文件来启动。 2.连接MongoDB 可以使用mongod客户端工具连接MongoDB数据库,mongod将会默认监听27017端口,因此连接时需要指定连接的主机和端口号。如果MongoDB服务器每个参数都是默认,可使用命令mongo来连接。连接到MongoDB后就可以进行各种操作。 3.数据库操作 MongoDB中通过use命令使用数据库或创建新的数据库。例如: ``` > use testdb switched to db testdb ``` 可以使用show dbs查看所有数据库的列表,但是只有当数据库中存在数据才会显示相应的大小。 4.集合操作 MongoDB中的集合类似于关系型数据库中的表,但没有关系模型。可以使用createCollection创建一个新的集合,例如: ``` > use testdb switched to db testdb > db.createCollection("userinfo") { "ok" : 1 } ``` 可以使用show collections查看所有集合的列表。 5.文档操作 MongoDB中的数据文档是以JSON的格式存储的。可以通过insert插入一个文档数据,例如: ``` > use testdb switched to db testdb > db.userinfo.insert({"name":"Tom","age":25}) WriteResult({ "nInserted" : 1 }) ``` 可以使用find查看所有文档,例如: ``` > db.userinfo.find() { "_id" : ObjectId("5e4e31e8270804109329945d"), "name" : "Tom", "age" : 25 } ``` 可以使用update修改文档,例如: ``` > db.userinfo.update({"name":"Tom"},{"$set":{"age":26}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) ``` 可以使用remove删除文档,例如: ``` > db.userinfo.remove({"age":26}) WriteResult({ "nRemoved" : 1 }) ``` 可以使用drop删除集合,例如: ``` > db.userinfo.drop() true ``` 以上就是MongoDB数据库的基本操作。这些操作只是MongoDB的冰山一角,MongoDB还有更丰富的功能和操作,可以根据具体需要学习实践。 ### 回答3: MongoDB是一种基于文档的NoSQL数据库,它允许您以JSON格式存储和查询数据。在本篇文章中,我们将探讨MongoDB数据库基础概念和操作。 1. 安装MongoDB 首先,您需要在本地计算机或服务器上安装MongoDB。这可以通过官方网站下载并安装。 2. 启动MongoDB 安装MongoDB后,您可以使用mongod命令启动MongoDB。使用这个命令会打开一个MongoDB服务器进程。 3. 连接MongoDB 您可以使用mongo shell连接到MongoDB。输入mongo命令将打开一个shell控制台,您可以在这里使用MongoDB的所有命令和操作。 4. 插入数据 使用MongoDB,您可以使用insert()命令向数据库中插入数据。下面是一个插入文档的示例: db.inventory.insert({item: "apple", qty: 20, type: "fruit"}) 这将向名为“inventory”的数据库集合插入一个新的文档。如果该集合不存在,它会自动创建。 5. 查询数据 在MongoDB中,您可以使用find()命令查询数据。以下是一个简单的示例: db.inventory.find({type: "fruit"}) 这将返回所有类型为“fruit”的文档。 6. 更新数据 您可以使用update()命令更新MongoDB数据库中的文档。下面是一个基本示例: db.inventory.update({item: "apple"}, {$set: {qty: 30}}) 这将在名为“inventory”的数据库集合中查找“item”属性等于“apple”的文档,并将其“qty”属性更新为30。 7. 删除数据 在MongoDB中,您可以使用remove()命令删除数据库中的文档。以下是一个示例: db.inventory.remove({item: "apple"}) 这将从名为“inventory”的数据库集合中删除“item”属性等于“apple”的文档。 以上是MongoDB基础操作。使用这些命令和概念,您可以轻松地创建、查询、更新和删除数据。同时,MongoDB还提供了许多高级功能和操作,使它成为一种非常灵活和强大的数据库解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值