MongoDB基本操作说明

MongodDB中有数据库(database)、集合(collection)、文档(document),其中数据库和集合不需要手动创建。当我们创建文档时,文档所在的集合或数据库不存在,会自动创建数据库和集合

数据库的CRUD(增删改查)的操作
插入
向数据库中插入文档——db.insert({doc})
db.stus.insert({name:”jack”,age:18,gender:”male”})
在这里插入图片描述

nInserted表示新增一条数据,同时新增了test数据库和stus集合

在这里插入图片描述

db..insertOne({})——插入一条
db..insertMany([{},{}])——插入多条

——当我们向集合中插入文档时,如果没有给文档指定_id属性,则数据库会自动为文档添加_id,该属性用来作为文档的唯一标识
如果_id自己指定,则系统不会在添加属性值,那必须确保它的唯一性

例:db.stus.insert([{name:“小丽”,age:16,gender:“女”},{name:“小华”,age:15,gender:“男”}]);
在这里插入图片描述
ObjectId是根据时间车来生成的,每一毫秒都会生成一个

查询

show dbs 或者 show database——查看当前现有的数据库
use 数据库名——进入到指定的数据库中
db——查看当前所处在的数据库
show collections——查看数据库中所有的集合
db.<collections>.find()——查看集合中的文档
db.<collection>.find({字段:值, 字段:值})——根据条件查询文档
db.<collection>.findOne()——查询集合中符合条件的第一个文档
db.<collection>.find().count()——统计数量

修改——update默认情况下只修改符合条件的第一个文档

db.<collection>.update({查询条件},{新对象})
注意:默认情况下使用新对象来替换新对象,慎用
db.<collection>.update({字段:值},{$set:{修改的字段:值}})——修改指定的字段属性
db.<collection>.update({字段:值},{$unset:{修改的字段:值}})----删除指定的字段属性
db.<collection>.updateOne——修改第一个符合条件的文档
db.<collection>.updateMany——修改多个符合条件的文档
db.<collection>.update({字段:值},{$set:{修改的字段:值}},{multi:true})——修改多个符合条件的文档
db.<collection>.replace()——替换

删除——remove默认情况下删除符合条件的所有文档

db.<collection>.remove({字段:值})----根据条件删除文档,并且默认情况下删除符合条件的所有文档
db.<collection>.remove({字段:值},true)----只会删除一个文档
db.<collection>.remove({})----删除集合中的所有文档
db.<collection>.deleteone——删除第一个符合条件的文档
db.<collection>.deletemany——删除多个符合条件的文档
db.<collection>.drop()----删除集合
db.dropDatabase()----删除数据库

在这里插入图片描述
排序

db.<collection>.find().sort({字段:1})          #值1表示升序排序, -1表示降序

索引

db.<collection>.ensureIndex ({字段:1})——创建索引              #值1表示升序排序,-1表示降序
db.<collection>.ensureIndex ({字段:1},name=””)——定义索引名称
db.<collection>.ensureIndex({字段:1},{unique:true})——创建唯一索引
db.<collection>.ensureIndex({字段:1},{backgroud:true})——在后台创建索引
db.<collection>.getIndexes()——查询索引
db.<collection>.dropIndex(“索引名”)——删除索引

视图

创建单集合视图

db.createView(视图名称,集合名称,[])——集合作为一张视图
db.createView(视图名称,集合名称,{$match:条件})——根据条件创建视图
db.createView(“student”,“stus”,{$match:{age:18}})

创建多集合视图

db.createView("视图名称","主查询集合",[{$lookup:{from:"关联集合",localField:"关联字段",foreignField:"外键",as:"为关联集合命名"}},{$project:{查询结果显示条件}}])

导入导出

在这里插入图片描述

mongoimport --db TEST --collection TZ_JCJ --type csv --headerline --file E:\XM\0MongoDB\csv;

备份与恢复数据库

Mongodump –h loaclhost:27017 –d test –o E:\XM\Mongodb

mongorestore -h loaclhost:27017 -d yhsj –dir E:\XM\0MongoDB\test




for /r D:\Program Files\MongoDB\Server\3.6\bin %i in (*.csv) do "mongoimport.exe" --host localhost --port 27017 --db test --type csv --headerline --ignoreBlanks --file E:\XM\0MongoDB\csv



@echo off
for /r %%file in (*.csv) do (
    @echo %%file
"mongoimport.exe" -d test -c collectionName --file E:\XM\0MongoDB\csv --type csv --headerline)


``


**五、开启安全认证**
1 启动mongodb服务,运行服务端
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190404143159298.png)

2 运行客户端,创建一个拥有最高权限的用户管理员,cmd输入:

mongo --port 27017

use admin

db.createUser(
{
user: “huge”,
pwd: “huge”,
roles: [ { role: “userAdminAnyDatabase”, db: “admin” },
{ role:"__system",db:“admin” }
] }
)



3 关闭以上两个cmd窗口,在mongod.cfg文件里添加security: authorization: enabled
,开启安全认证,

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190404143231942.png)

然后重新启动mongodb服务

4 验证,cmd输入以下,如果返回值为 1 ,则成功 

mongo --port 27017 -u “huge” -p “huge” --authenticationDatabase “admin”

use admin

db.auth(“huge”, “huge” )



![在这里插入图片描述](https://img-blog.csdnimg.cn/20190404143259194.png)

5 这样就可以用huge用户名和密码登录所有数据库

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190404143308786.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzIxMjM2NQ==,size_16,color_FFFFFF,t_70)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190404143314388.png)

而不使用安全认证便无法连接

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190404143324364.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzIxMjM2NQ==,size_16,color_FFFFFF,t_70)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190404143330366.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzIxMjM2NQ==,size_16,color_FFFFFF,t_70)

6 创建普通用户:打开nosql manager,登录admin数据库,然后在shell中输入如下:
  (注:必须是从admin切到test_zls,我们所创建的所有用户都保存在system.users里面)

use admin
use test_zls
db.createUser(
{
user: “test_zls”,
pwd: “test_zls”,
roles: [ { role: “readWrite”, db: “test_zls” }]
}
)



运行如图所示:

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190404143358343.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzIxMjM2NQ==,size_16,color_FFFFFF,t_70)

7 验证,继续在shell输入:

use test_zls
db.auth(“test_zls”,“test_zls”)


运行如下,若返回1,则验证成功

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190404143421857.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzIxMjM2NQ==,size_16,color_FFFFFF,t_70)

8 在左侧右键,选择创建新的mongodb连接,设置连接参数如下:

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190404143432590.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzIxMjM2NQ==,size_16,color_FFFFFF,t_70)

9 设置好之后,就可以用我们创建的普通用户登录了,一个用户可以有不同的权限,在创建用户时可以在“ roles: [ { role: "readWrite", db: "test_zls" }]”自定义

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190404143444912.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzIxMjM2NQ==,size_16,color_FFFFFF,t_70)


MongoDB是一个面向文档的数据库,目前由10gen开发并维护,它的功能丰富,齐全,完全可以替代MySQL。在使用MongoDB做产品原型的过程中,我们总结了MonogDB的一些亮点:使用JSON风格语法,易于掌握和理解:MongoDB使用JSON的变种BSON作为内部存储的格式和语法。针对MongoDB的操作都使用JSON风格语法,客户端提交或接收的数据都使用JSON形式来展现。相对于SQL来说,更加直观,容易理解和掌握。Schema-less,支持嵌入子文档:MongoDB是一个Schema-free的文档数据库。一个数据库可以有多个Collection,每个Collection是Documents的集合。Collection和Document和传统数据库的Table和Row并不对等。无需事先定义Collection,随时可以创建。Collection中可以包含具有不同schema的文档记录。 这意味着,你上一条记录中的文档有3个属性,而下一条记录的文档可以有10个属性,属性的类型既可以是基本的数据类型(如数字、字符串、日期等),也可以是数组或者散列,甚至还可以是一个子文档(embed document)。这样,可以实现逆规范化(denormalizing)的数据模型,提高查询的速度。图1 MongoDB是一个Schema-free的文档数据库图2是一个例子,作品和评论可以设计为一个collection,评论作为子文档内嵌在art的comments属性中,评论的回复则作为comment子文档的子文档内嵌于replies属性。按照这种设计模式,只需要按照作品id检索一次,即可获得所有相关的信息了。在MongoDB中,不强调一定对数据进行Normalize ,很多场合都建议De-normalize,开发人员可以扔掉传统关系数据库各种范式的限制,不需要把所有的实体都映射为一个Collection,只需定义最顶级的class。MongoDB的文档模型可以让我们很轻松就能将自己的Object映射到collection中实现存储。图2 MongoDB支持嵌入子文档简单易用的查询方式:MongoDB中的查询让人很舒适,没有SQL难记的语法,直接使用JSON,相当的直观。对不同的开发语言,你可以使用它最基本的数组或散列格式进行查询。配合附加的operator,MongoDB支持范围查询,正则表达式查询,对子文档内属性的查询,可以取代原来大多数任务的SQL查询。CRUD更加简单,支持in-place update:只要定义一个数组,然后传递给MongoDB的insert/update方法就可自动插入或更新;对于更新模式,MongoDB支持一个upsert选项,即:“如果记录存在那么更新,否则插入”。MongoDB的update方法还支持Modifier,通过Modifier可实现在服务端即时更新,省去客户端和服务端的通讯。这些modifer可以让MongoDB具有和Redis、Memcached等KV类似的功能:较之MySQL,MonoDB更加简单快速。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值