MongoDB学习笔记

我与影子孤独终老i 提交于 2020-02-25 19:23:04

MongoDB学习笔记

一、MongoDB安装

1.下载

官方下载地址:https://www.mongodb.com/download-center/community

快速下载地址:http://dl.mongodb.org/dl/win32/x86_64

2.安装

点击custom可以修改安装目录,另外取消勾选Install MongoDB Compass选项。此为图形界面管理工具。

3.配置

  1. 将bin文件夹配置到PATH的环境变量中。
  2. 在data文件夹下手动创建db和log

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rbBAlFGB-1582621391280)(.\QQ截图20200224182821.png)]

  1. 在log文件夹下创建mongodb.log

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ro2yQZIP-1582621391281)(.\QQ截图20200224182911.png)]

  1. 在安装文件夹下新建mongo.config

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r5PncrJb-1582621391282)(.\QQ截图20200224183514.png)]

  1. 文件中写入

    #数据文件,路径必须是你自己的电脑的对应路径
    dbpath=D:\Program Files\MongoDB\Server\4.2\data\db
    
    #日志文件  
    logpath=D:\Program Files\MongoDB\Server\4.2\data\log\mongodb.log
    
    #错误日志采用追加模式,配置这个选项后mongodb的日志会追加到现有的日志文件,而不是从新创建一个新文件
    logappend=true 
    
    #启用日志文件,默认启用
    journal=true 
    
    #这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
    
    quiet=true 
    
    #端口号 默认为27017
    
    port=27017 
    
  2. 点击mongod.exe,如果闪一下退出,说明安装正常。进入测试地址localhost:27017

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5yvTd55f-1582621391282)(.\QQ截图20200224184752.png)]

  3. 进入bin文件夹,使用如下命令:

    mongod --config D:\Program Files\MongoDB\Server\4.2\mongo.config --install --serviceName "MongoDB"
    

    右键我的电脑,管理查看mongoDB服务是否自动开启。

二、Robo 3T安装

1.下载

官方下载地址:https://robomongo.org/download

2.建立连接

点击Create,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aAoamRp6-1582621391283)(C:\Users\hxz\Desktop\MongoDB笔记\QQ截图20200224202820.png)]

修改连接名,save

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GqiyudTu-1582621391284)(C:\Users\hxz\Desktop\MongoDB笔记\QQ截图20200224202902.png)]

三、基本概念

四、语法格式

1.创建数据库

use DATABASE_NAME

如果数据库不存在,则创建。否则切换到指定数据库

2.查看所有数据库(无数据则不显示)

show dbs

3.删库(先use,再drop)

use runoob
db.dropDatabase()

4.创建集合(表)

db.createCollection(name, options)//注意Colle“C”大写
db.createCollection("mycol",{capped:true,autoIndexId:true,size:6142800,max:10000})
  • name:要创建的集合名字
  • options:可选参数
字段 类型 描述
capped 布尔 (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。
autoIndexId 布尔 (可选)如为 true,自动在 _id 字段创建索引。默认为 false。
size 数值 (可选)为固定集合指定一个最大值,以千字节计(KB)。 如果 capped 为 true,也需要指定该字段。
max 数值 (可选)指定固定集合中包含文档的最大数量。

在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。


5.查看集合

show collections

6.删除集合

db.COLLECTION_NAME.drop()

7.插入文档(一条记录)

db.COLLECTION_NAME.insert(document)
db.collection.insertOne({"a": 3})
db.collection.insertMany([{"b": 3}, {'c': 4}])
//例子,该集合不在该数据库中,MongoDB会自动创建该集合并插入文档。
db.col.insert({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
})

也可以将数据定义为一个变量,然后插入:

document=({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
});
db.col.insert(document)

8.查看已插入文档

db.COLLECTION_NAME.find()
db.COLLECTION_NAME.find().pretty()//格式优化

9.更新文档

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)
db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如,,inc…)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。

save() 方法通过传入的文档来替换已有文档。语法格式如下:

db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)
  • document : 文档数据。
  • writeConcern :可选,抛出异常的级别。
db.col.save({
    "_id" : ObjectId("56064f89ade2f21f36b03136"),
    "title" : "MongoDB",
    "description" : "MongoDB 是一个 Nosql 数据库",
    "by" : "Runoob",
    "url" : "http://www.runoob.com",
    "tags" : [
            "mongodb",
            "NoSQL"
    ],
    "likes" : 110
})

10.删除文档

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)
db.col.remove({'title':'MongoDB 教程'})
  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
  • writeConcern :(可选)抛出异常的级别。

11.查询文档

db.collection.find(query, projection)
  • query :可选,使用查询操作符指定查询条件
  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

db.col.find().pretty()

11.1 基本比较条件

操作 格式 范例 RDBMS中的类似语句
等于 {:} db.col.find({"by":"菜鸟教程"}).pretty() where by = '菜鸟教程'
小于 {:{$lt:}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
小于等于 {:{$lte:}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
大于 {:{$gt:}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
大于等于 {:{$gte:}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
不等于 {:{$ne:}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50

11.2 AND比较条件

多条件间以逗号隔开

db.col.find({key1:value1, key2:value2}).pretty()

11.3 OR比较条件

db.col.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()
//举例子
db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()

11.4 AND 和 OR 联合使用

db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()

11.5 使用 (<) 和 (>) 查询

db.col.find({likes : {$lt :200, $gt : 100}})

11.6 $type操作符

db.col.find({"title" : {$type : 'string'}})

12.Limit与Skip方法

db.COLLECTION_NAME.find().limit(NUMBER)

db.col.find({},{“title”:1,_id:0}).limit(2)

db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

13.排序

sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

db.COLLECTION_NAME.find().sort({KEY:1})

14.创建索引

db.collection.createIndex(keys, options)
db.values.createIndex({open: 1, close: 1}, {background: true})

Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。

createIndex() 接收可选参数,可选参数列表如下:

Parameter Type Description
background Boolean 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为false
unique Boolean 建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
name string 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
dropDups Boolean **3.0+版本已废弃。**在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.
sparse Boolean 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.
expireAfterSeconds integer 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
v index version 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
weights document 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
default_language string 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语
language_override string 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.

15.聚合

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
表达式 描述 实例
$sum 计算总和。 db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : {sum:"sum : "likes"}}}])
$avg 计算平均值 db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : {avg:"avg : "likes"}}}])
$min 获取集合中所有文档对应值得最小值。 db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : {min:"min : "likes"}}}])
$max 获取集合中所有文档对应值得最大值。 db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : {max:"max : "likes"}}}])
$push 在结果文档中插入值到一个数组中。 db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", url : {push:"push: "url"}}}])
$addToSet 在结果文档中插入值到一个数组中,但不创建副本。 db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", url : {addToSet:"addToSet : "url"}}}])
$first 根据资源文档的排序获取第一个文档数据。 db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", first_url : {first:"first : "url"}}}])
$last 根据资源文档的排序获取最后一个文档数据 db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", last_url : {last:"last : "url"}}}])

16.管道

管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。

MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。

表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。

这里我们介绍一下聚合框架中常用的几个操作:

  • $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
  • matchmatch:用于过滤数据,只输出符合条件的文档。match使用MongoDB的标准查询操作。
  • $limit:用来限制MongoDB聚合管道返回的文档数。
  • $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
  • $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
  • $group:将集合中的文档分组,可用于统计结果。
  • $sort:将输入文档排序后输出。
  • $geoNear:输出接近某一地理位置的有序文档。
db.article.aggregate(
    { $project : {
        title : 1 ,
        author : 1 ,
    }}
 );

这样的话结果中就只还有_id,tilte和author三个字段了,默认情况下_id字段是被包含的,如果要想不包含_id话可以这样:

db.article.aggregate(
    { $project : {
        _id : 0 ,
        title : 1 ,
        author : 1
    }});

五、维护

1.副本集????????

2.分片集????????

3.备份(mongodump)与恢复(mongorestore)

备份mongodump

mongodump -h dbhost -d dbname -o dbdirectory
mongodump -h 127.0.0.1:27017 -d TestBase -o D:\data\home\momgodump
  • -h:

    MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017

  • -d:

    需要备份的数据库实例,例如:test

  • -o:

    备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。

恢复mongorestore

mongorestore -h <hostname><:port> -d dbname <path>
mongorestore -h 127.0.0.1:27017 -d TestBase --dir D:\data\home\momgodump\TestBase
  • –host <:port>, -h <:port>:

    MongoDB所在服务器地址,默认为: localhost:27017

  • –db , -d :

    需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2

  • –drop:

    恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!

  • mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。

    你不能同时指定 和 --dir 选项,–dir也可以设置备份目录。

  • –dir:

    指定备份的目录

    你不能同时指定 和 --dir 选项。

4.监控

mongostat会间隔固定时间获取mongodb的当前运行状态,并输出。

mongostat

mongotop提供了一个方法,用来跟踪一个MongoDB的实例,查看哪些大量的时间花费在读取和写入数据。 mongotop提供每个集合的水平的统计数据。默认情况下,mongotop返回值的每一秒。

mongotop
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!