1.6 MongoDB基础知识

不同于关系型数据库MYSQL,MongoDB是非关系型数据库,其基本概念是文档集合数据库 。下表将帮助您更容易理解Mongo中的一些概念:

SQL术语/概念

MongoDB术语/概念

解释/说明

database

database

数据库

table

collection

数据库表/集合

row

document

数据记录行/文档

column

field

数据字段/域

index

index

索引

table joins

表连接,MongoDB不支持

primary key

primary key

主键,MongoDB自动将_id字段设置为主键

通过下图实例,可以更直观的了解Mongo中的一些概念:

可以看到MongoDB采用类似Python中的字典的键值对存储结构,十分方便操作。

1. 命令行直接操作MongoDB

与Mysql一样,MongoDB可以直接通过命令行MongoDB Shell执行SQL语句来操作。

1.1 连接MongoDB

在服务器上启动MongoDB服务以后,可以开始连接MongoDB数据库。

标准 URI 连接语法:

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
  • mongodb:// 这是固定的格式,必须要指定。

  • username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登陆这个数据库

  • host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。

  • portX 可选的指定端口,如果不填,默认为27017

  • /database 如果指定username:password@,连接并验证登陆指定数据库。若不指定,默认打开 test 数据库。

  • ?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开

如,使用默认端口来连接 MongoDB 的服务。

mongodb://localhost

通过 shell 连接 MongoDB 服务:

$ ./mongo
MongoDB shell version: 3.0.6
connecting to: test
...

使用用户 admin 使用密码 123456 连接到本地的 MongoDB 服务上。输出结果如下所示:

> mongodb://admin:123456@localhost/
...

使用用户名和密码连接登陆到指定数据库,格式如下:

mongodb://admin:123456@localhost/test

连接本地数据库服务器,端口是默认的。

mongodb://localhost

使用用户名fred,密码foobar登录localhost的admin数据库。

mongodb://fred:foobar@localhost

使用用户名fred,密码foobar登录localhost的baz数据库。

mongodb://fred:foobar@localhost/baz

连接 replica pair, 服务器1为example1.com服务器2为example2。

mongodb://example1.com:27017,example2.com:27017

连接 replica set 三台服务器 (端口 27017, 27018, 和27019):

mongodb://localhost,localhost:27018,localhost:27019

1.2 创建数据库

MongoDB 创建数据库的语法格式如下:

use DATABASE_NAME

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

以下实例我们创建了数据库 new_mongodb_test:

> use new_mongodb_test
switched to db new_mongodb_test
> db
new_mongodb_test
>

如果想查看所有数据库,可以使用 show dbs 命令:

> show dbs
admin             0.000GB
config            0.000GB
local             0.000GB
test              0.000GB
>

其中admin,config,local是安装MongoDB后自动创建的数据库。

  • admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。

  • local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合

  • config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

可以看到,我们刚创建的数据库 runoob 并不在数据库的列表中, 要显示它,我们需要向 new_mongodb_test数据库插入一些数据。

> db.new_mongodb_test.insert({"name":"Hello"})
WriteResult({ "nInserted" : 1 })
> show dbs   #类似于Mysql中的show databases;
admin             0.000GB
config            0.000GB
local             0.000GB
new_mongodb_test  0.000GB
test              0.000GB
> use test   #类似于mysql中的use test
switched to db test
> show collections #类似于mysql中的show tables
students
>
> db.getCollection('students').find({})   #类似于Mysql中的select * from students,查询所有row/documents
{ "_id" : ObjectId("5b68f53e945f8a2708cef1b6"), "id" : "20170101", "name" : "Jordan", "age" : 20, "gender" : "male" }
>

MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。

1.3 插入文档

MongoDB的文档document可以理解为Mysql中的row,但是其结构不一样,document和Json一样,都是键值对结构。所有存储在集合中的数据都是BSON格式。BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON。

MongoDB使用 insert()save() 方法向集合中插入文档,语法如下:

db.COLLECTION_NAME.insert(document)

如:以下文档可以存储在 MongoDB 的 runoob 数据库 的 col 集合中。

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

以上实例中 col 是集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档, 查看已插入文档:

> show dbs
admin             0.000GB
config            0.000GB
local             0.000GB
new_mongodb_test  0.000GB
test              0.000GB
>
> use new_mongodb_test
switched to db new_mongodb_test
> db.col.insert({title: 'MongoDB 教程',
...     description: 'MongoDB 是一个 Nosql 数据库',
...     by: '菜鸟教程',
...     url: 'http://www.runoob.com',
...     tags: ['mongodb', 'database', 'NoSQL'],
...     likes: 100
... })
WriteResult({ "nInserted" : 1 })
> db.col.find()
{ "_id" : ObjectId("5b6a43f19eda1f11d6e6b382"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 N
osql 数据库", "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
});

执行后显示结果如下:

{
        "title" : "MongoDB 教程",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "菜鸟教程",
        "url" : "http://www.runoob.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}

执行插入操作:

> db.col.insert(document)
WriteResult({ "nInserted" : 1 })
>

插入文档你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。

关于一些更详细的内容可以到官网与runoob上查看。

1.4 使用GUI工具查看MangoDB

下载安装Robot 3T工具即可查看MongoDB数据库里的数据,也可以在它上面执行sql语句,十分方便。下载地址:https://robomongo.org/

Last updated