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