循序渐进MongoDB V3.4(Ubuntu)

MongoDB是一个跨平台、开源、面向文档的数据库。它具备高性能、高可用性和易于扩展的特性。学习MongoDB要特别关注以下几个概念:

  • Database它是集合(Collections)的容器。
  • Collection它是MongoDB文档(documents)的一个组。
  • Document它是一组键值对(a set of key-value pairs)。

从安装开始:

安装

安装之前我们需要导入MongoDB GPG key:

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927

导入MongoDB repository:

$ echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

$ sudo apt-get update

可以安装了,因是目前最新的3.4所以可能要加“--allow-unauthenticated”选项:

// 先用下面的命令,如果要求 --allow-unauthenticated 就转到下一个命令
$ sudo apt-get install -y mongodb-org

// 根据提示可以使用下面这个命令
$ sudo apt-get install -y mongodb-org --allow-unauthenticated

这是一个漫长的过程,以我200M光纤的速度还是花了两小时。

完成安装后通过如下命令修改MongoDB的服务文件:

$ cd /lib/systemd/system

$ sudo nano mongod.service

并确保文件是以下内容:

[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
Documentation=https://docs.mongodb.org/manual

[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf

[Install]
WantedBy=multi-user.target

退出编辑器前要保存该文件。

键入下面命令使MongoDB能够开机启动:

$ sudo systemctl start mongod

$ sudo systemctl enable mongod

重新启动机器以验证安装是正确的。机器启动后键入下面命令,如果进入MongoDB控制台(看到控制台“>”符号)就说明安装成功了:

$ mongo

在MongoDB控制台键入下面命令:

> use admin

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

> exit

修改mongod.service并加入认证选项:

$ cd /lib/systemd/system

$ sudo nano mongod.service

修改文件第9行为如下内容:

ExecStart=/usr/bin/mongod --quiet --auth --config /etc/mongod.conf

保存并退出。

执行下面命令重起MongoDB:

$ sudo systemctl daemon-reload

$ sudo service mongod restart

安装成功,现在可以用设定的用户及密码登录控制台了:

$ mongo -u admin -p admin123 --authenticationDatabase admin

进入MongoDB控制台,畅游其中之前需要了解以下几个简单的命令:

  • help 根级别帮助
  • db.version() 列表当前MongoDB的版本
  • db.stats() 列表当前数据库(database)的状态
  • db.help() 列表DB当前的方法
  • show dbs 列表当前的可用的数据库(database)
  • db 列表当前在用的数据库(database)
  • show collections 列表当前数据库的可用集合

热个身吧:

> db.version()
3.4.10

> db.stats()
{
    "db" : "test",
    "collections" : 0,
    "views" : 0,
    "objects" : 0,
    "avgObjSize" : 0,
    "dataSize" : 0,
    "storageSize" : 0,
    "numExtents" : 0,
    "indexes" : 0,
    "indexSize" : 0,
    "fileSize" : 0,
    "ok" : 1
}

> show dbs
admin  0.000GB
local  0.000GB

> db
test

> show collections

为节省篇幅db.help()就不列了,下面进入MongoDB的实践篇。

实践

MongoDB虽然与传统的关系数据库系统有很多差异,但还是可以有以下的类别:

  • MongoDB是数据库容器,管理多个数据库实体,这点与关系数据库是一致的。
  • 一个MongoDB数据库是集合容器,管理多个集合(collection),这里的集合概念与关系数据库中表(table)的概念是一个级别的。
  • 一个集合(collection)是文档(document)容器,管理多个文档,而这个文档概念与关系表中行(row)是一个级别的概念。
  • 一个文档(document)又是键值对的集合(set of key-value pairs),而每个键值对与关系表中的字段(field)是一个级别的概念。
  • 同一关系表(table)中,不同的行有完全相同的数据字段定义,他们存储完全相似的数据;而MongoDb集合(collection)中的文档(document)它们可以有完全不同的数据定义,无论是数据类型和键值对个数都可以不同。这三MongoDB和关系数据库最显著的区别之一。

下图表现了关系表与MongoDB的Collection之间的区别:

通过类比我们对MongoDB已经有了一个清晰的概念,下面继续MongoDB Step by Step。

创建、删除数据库(Database)

// 语法:use <db name>
// 下面语句,如果mydb存在则选择它为当前数据库;
// 否则,创建一个名为mydb的数据库并选择它
> use mydb switched to db mydb

// 语法:db.dropDatabase()
// 下面语句删除当前数据,删除前注意选择当前库
> use mydb
switched to db mydb

> db.dropDatabase()
{ "ok" : 1}

指定数据库中创建、删除集合 (Collection)

> use mydb

// 语法:db.createCollection(<collection>[, {options}])
> db.createCollection("Books")

// 列表当前db的集合
> show collections
Books

// 语法:db.<collection>.drop()
// 返回 true 成功
> db.Books.drop()
true

集合(Collection)中插入(insert)文档(Document) 

// 语法:db.<collection>.insert(<{document}>)
// <document> JSON format data
// 返回插入状态 > db.Books.insert({
"title": "JavaScript"})
WriteResult({"nInserted" : 1})

// Mongo console "enter" new line
> db.Books.insert({
"title": "Thinking in Java",
"price": 60
})

// 此例中插入的文档有不同的结构
> db.Books.insert({
"title": "Java EE",
"subtitle": "6th Edition",
"price": 99
})

// 列表插入的文档
// 语法:db.<collection>.find([{options}]) 或 db.<collection>.find([{options}]).pretty()
> db.Books.find()
{ "_id" : ObjectId("5a02c8fe850ae434e394bc09"), "title" : "JavaScript" }
{ "_id" : ObjectId("5a02c93b850ae434e394bc0a"), "title" : "Thinking in Java", "price" : 59 }
{ "_id" : ObjectId("5a02d0a2850ae434e394bc0c"), "title" : "Java EE", "subtitle" : "6th Edition", "price" : 99 }

集合(collection)中更新(update)文档(document)

// 语法:db.<collection>.update(<{codition}>, <{update}>)
> db.Books.update(
{
"_id": ObjectId("5a02d0a2850ae434e394bc0c")
},
{
$set:
{
"price": 100
}
}
)

 

posted @ 2017-11-08 11:43  Jinzd  阅读(231)  评论(0编辑  收藏  举报