mongodb
NoSQL简介
NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",指的是非关系型的数据库
- 代表着不仅仅是SQL
- 没有声明性查询语言
- 没有预定义的模式
-键 - 值对存储,列存储,文档存储,图形数据库 - 最终一致性,而非ACID属性
- 非结构化和不可预知的数据
- CAP定理 (一致性(Consistency) ,可用性(Availability) ,分隔容忍(Partition tolerance))
- 高性能,高可用性和可伸缩性
MongoDB简介
- MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
- MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
MongoDB 概念解析
sql | mongodb |
---|---|
table | collection 表/集合 |
row | document 行/文档 |
column | field 字段/域 |
primary_key | primary_key MongoDB自动将_id字段设置为主键 |
数据库
- 一个mongodb中可以建立多个数据库。
- MongoDB的默认数据库为"db",该数据库存储在data目录中。
- MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
- "show dbs" 命令可以显示所有数据的列表。
- 执行 "db" 命令可以显示当前数据库对象或集合。
- 运行"use"命令,可以连接到一个指定的数据库。
文档
- 文档是一组键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
一个简单的文档例子如下:
{"site":"www.runoob.com", "name":"菜鸟教程"}
集合
- 集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。
- 集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
- 当第一个文档插入时,集合就会被创建。
- 数据库不允许进行删除。使用drop()方法删除collection所有的行。
MongoDB 创建数据库
- 创建数据库
use test
- 如果你想查看所有数据库,可以使用
show dbs
命令:
show dbs
结果:
admin 0.000GB
config 0.000GB
local 0.000GB
可以看到,我们刚创建的数据库 test 并不在数据库的列表中, 要显示它,我们需要向 test 数据库插入一些数据
db.test.insert({"name":"菜鸟教程"})
show dbs
显示:
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
-
MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。
-
在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
MongoDB 删除数据库
show dbs
use test
db.dropDatabase()
show dbs
结果:
admin 0.000GB
config 0.000GB
local 0.000GB
创建集合
use test
db.createCollection("runoob")
- 如果要查看已有集合,可以使用 show collections 命令:
- 在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。
删除集合
db.runoob.insert({'d':'333333'})
db.runoob.drop()
MongoDB 插入文档
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 会自动创建该集合并插入文档。
- 文档执行两次插入操作
使用 find() 函数查询数据:
db.col.find()
显示:
{ "_id" : ObjectId("56066169ade2f21f36b03137"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
{ "_id" : ObjectId("5606616dade2f21f36b03138"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
db.col.find().pretty()#美观
显示:
{
"_id" : ObjectId("5b7f7357c98c3333acf4e0e5"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
{
"_id" : ObjectId("5b7f735fc98c3333acf4e0e6"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
接下来我们移除 title 为 'MongoDB 教程' 的文档:
db.col.remove({'title':'MongoDB 教程'})
db.col.find()
没数据显示了,两条数据全删除了
- 如果你只想删除第一条找到的记录可以设置 justOne 为 1,如下所示:
db.col.remove({'title':'MongoDB 教程'},1)
db.col.find().pretty()
显示
{
"_id" : ObjectId("5b7f74e6c98c3333acf4e0e8"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
即只删除掉一条数据
MongoDB 删除文档
db.collection.remove(
<query>,
<justOne>
)
MongoDB 查询文档
db.collection.find(query, projection)