[MongoDB]入门笔记

友情提示:

本文学习笔记是17年记录的,当时安装平台及演示都是window操作系统,且版本是mongodb3.4.3。

如今19年1月了,再次学习mongodb,版本已经变为4.0.5。且使用了macOS系统进行演示。新增内容:

1. macos系统上如何安装mongodb

2. 如何创建用户

3. 如何设置配置文件

一、安装

在window上进行MongoDB的安装

1. 获取系统版本信息

打开cmd运行

wmic os get caption

wmic os get osarchitecture

2. 下载MongoDB

目前最新稳定版 3.4.3

直接双击安装,安装完成后将安装路径保存在系统环境变量中

3. 设置运行环境

需要一个数据目录来存储所有的数据,数据目录格式是 datadb (后面会有用)

于是在任意位置上新建一个 datadb 文件夹目录

并使用 --dbpath [path] 命令将这个目录设置为数据存储目录,同时启动mongod.exe(在cmd中运行该程序,所以可以直接将程序拖放到cmd中。也可以像下面那样直接输入程序所在路径)

"..mongod.exe" --path "E:mongoDBStoredata"  [..是mongod.exe所在路径]

执行命令后等待输出

waiting for connections on port 27017

4. 启动mongo.exe连接服务

mongo.exe

输出

connecting to: mongodb://127.0.0.1:27017

MongoDB server version: 3.4.3

5. 打开浏览器输入 localhost:27017

It looks like you are trying to access MongoDB over HTTP on the native driver port.

在MacOS上进行安装

1. 使用homebrew进行安装,非常简单。只是安装时间稍微有点长,耐心等待

2. 安装指令

brew install mongodb 或者 sudo brew install mongodb

如果提示权限不够需要加上sudo

3. 等待安装,安装完成会提示如下信息

To have launchd start mongodb now and restart at login:
  brew services start mongodb
Or, if you don't want/need a background service you can just run:
  mongod --config /usr/local/etc/mongod.conf

4. 这里需要特别注意,很多网上的教程都说,要创建一个新的目录/data/db以及.config文件还有说要将mongodb的可执行文件目录加入到$PATH中。

其实都没有必要,采用默认配置文件(/usr/local/etc/mongod.conf)即可。只是需要注意,

如果采用--config方式启动,直接执行命令后,就可以用 mongo 命令进行客户端链接,这里也要注意添加sudo

如果采用services服务方式启动,就需要注意了,一定要加上sudo权限,sudo brew services start mongodb

(这里本人在自己的MAC电脑上试验过,不添加sudo虽然也能启动服务,但是使用mongo命令缺无法连接客户端)

通过brew services list可以查看mongodb服务已经启动,接着可以用mongo命令进行客户端链接。

个人觉得作为服务启动可以避免每次开机都要启动,且还要多开一个终端窗口。

5. 补充

sudo brew services start <name> 将name服务作为系统服务启动

sudo brew services list 查看当前系统启动的服务列表

sudo brew services stop <name> 将name服务停止

sudo brew services reload <name> 将name服务重新启动

二、将mongodb配置为window服务 [配置完成后服务名为 MongoDB]

1. 在数据目录data下新建一个mongo.config文件 [后面系统会自动创建这个文件]

2. 在数据目录data上新建一个文件夹log 并在其中新建一个文件 mongodb.log

3. 编辑 config文件,给dbpath和logpath这两个变量赋值,dbpath就是前面你新建的那个数据目录data文件夹,而logpath则是第二步你所新建的那个log文件路径。

(这里需要注意,如今最新版本mongodb的配置文件已经不再是所有配置项放在同一级了,而是分为多层配置,且不在使用key=value形式,而是使用key : value

最新配置文件格式及选项放在后面讲解,这里的dbpath和logpath需要分别放在systemLog和 storage两个配置项之下)

dbpath = E:mongoDBStoredata

logpath = E:mongoDBStoredatalogmongodb.log

4. 在cmd中运行

"..mongod.exe" --config "E:mongoDBStoredatamongo.config" --install

5. 启动服务 cmd运行命令

net start mongodb

命令行输出: MongoDB服务正在启动...  服务已经启动完成

6. 关闭服务

net stop mongodb

7. 卸载服务

sc.exe delete mongodb

8. 启动客户端连接服务

直接双击运行 mongo.exe

或者在cmd命令行中使用 mongo  mongodb://localhost:27017/[dbname]

三、基本操作

1. 数据库基本操作

查看数据库 show dbs

选择数据库或者新建数据库 use [database] 

查看数据库下的所有集合 show collections

查看当前所在的数据库 db

删除当前数据库  db.dropDatabase()

删除数据库中某个集合 db.[collection].drop()

在数据库中创建集合 db.createCollection(name, options)

2. 插入数据,查找数据

db.[collection].insert()

db.[collection].save()

db.[collection].find()

上面三个方法分别表示插入与查找数据库集合中的数据

通过find()方法可以查询指定条件的数据集合。接着可以通过

.count()

.skip()

.limit()

.sort()

这四个方法对查询结果进行更近一步的筛选

3. 更新数据

save()方法既可以插入数据,也可以更新数据。取决于id字段

另外一个更新数据的方法就是update()

为了实现部分更新,需要使用 $set语法

db.student.insert({name: 'joyjoe', age: 20, sex: 'male'})
db.student.insert({name: 'lucy', age: 25, sex: 'female'})
db.student.insert({name: 'anna', age: 18, sex: 'female'})
// anna同学的年龄登记错了需要修改
db.student.update({name: 'anna'}, {$set: {age: 20} })
// 把anna同学的登记信息修改后只留下了年龄
db.student.update({name: 'anna'}, {age: 20})

update()方法的第三个参数用来指明当查找的数据不存在时是否会自动插入这条新数据。默认false不插入

update()方法的第四个参数用来指明是否把查找出来的所有数据全部进行更新。默认false只更新第一条数据

4. 数据删除

remove()  默认删除所有满足条件的数据

所以不传入参数是会系统报错的

设置第二个参数justOnly为true可以只删除第一条数据

四、索引

查询集合中所有索引 db.[collection].getIndexes()

给集合添加新的索引(仅对于空集合)

db.[collection].ensureIndex() 参数也是JSON对象,键表明索引字段,值表明排序方向。

db.[collection].createIndex() 创建索引 (推荐)

索引有很多,分别为: _id索引

1. _id索引(集合默认索引)

2. 单键索引(需要手动创建) 为基本数据类型的数据创建索引

3. 多键索引   为数组中的每个元素添加索引

4. 复合索引   为多个字段值创建索引,可以支持匹配多个键的查询

5. 过期索引   一段时间过后就会过期的索引,同时相应数据也会删除。适用于日志记录和用户登录信息存储等数据

db.createIndex( { }, { expireAfterSeconds: 10 })  (单位 秒)

存储在过期索引中的值必须是指定的时间类型,如果指定了数组,则按照最小值进行判断删除。同时不能是复合索引,删除时间是不精确的。

6. 全文索引

7. 地理位置索引 

五、权限认证

在 mongo.config文件中开启权限认证,在文件中进行配置

(最新配置方式是在 security层级下指定 authorization: enabled )

auth = true

重启服务后,在log文件中可以找到

authorization: "enabled"

此时还没有创建用户,依然可以匿名登陆。

(配置文件中指定需要权限认证之后重启服务,再次登录就需要使用账号密码进行数据库连接)

1. 如何创建用户

createUser() 传入JSON对象


{

  user: "<name>",

  pwd: "<cleartext password>",

  customData: { <any information>},

  roles: [{ role: "<role>", db: ["<database>"...] }...]

}

role: read, readWrite, dbAdmin, dbOwner, userAdmin

上面这一段创建用户的方式有点变化,如下是最新配置方式

use admin; // 选定admin数据库

db.createUser({

  user: "<name>",

  pwd: "<password>",

  roles: [ { role: "<role>", db: "<dbname>"},  "<role>"]

})

首先选定一个数据库,然后在当前数据库之下创建用户

原文地址:https://www.cnblogs.com/joyjoe/p/6704191.html