MongoDB属于非关系型数据库
是非关系数据库当中功能最丰富,最像关系数据库的。。。
NoSQL(NoSQL = Not Only SQL ),意即”不仅仅是SQL”。
NoSQL
- 代表着不仅仅是SQL
- 没有声明性查询语言
- 没有预定义的模式
- 键 - 值对存储,列存储,文档存储,图形数据库
- 最终一致性,而非ACID属性
- 非结构化和不可预知的数据
- CAP定理
- 高性能,高可用性和可伸缩性
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
基本命令
show dbs 显示所有数据库的列表
db 命令可以显示当前数据库对象或集合
use 命令,可以连接到一个指定的数据库
文档:相当于关系数据库下的行,在MongoDB中是collection下一级的
文档中的键/值对是有序的。
文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
MongoDB区分类型和大小写。
MongoDB的文档不能有重复的键。
文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
集合:类似于mysql中的表结构,在MongoDB中存储文档
创建数据库
use DATABASE_NAME
如果数据库不存在,则创建数据库,否则切换到指定数据库。
但是这样创建的数据库并不显示,必须插入一些数据
use qtest
db.qtest.insert({'star':'lord'})
#MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。
#在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
删除数据库
db.dropDatabase()
删除当前数据库,默认为 test,可以使用 db 命令查看当前数据库名。
删除集合
- db.集合名字.drop()
> use runoob
switched to db runoob
> show tables
site
> db.site.drop()
true
> show tables
>
MongoDB 创建集合
- db.createCollection(name, options)
use qq
db.createCollection("student") #这里也是个坑啊,名字一定要用引号引起来
show collections #这里,show tables同效果
——也可以直接指明要向哪个集合中插入文档,即使这个集合不存在,插入文档及使用或创建了集合
use qq
db.teacher.insert({'I':'teacher'})
删除集合
- db.集合名字.drop()
文档操作,插入,删除,更新,查询—————————————————————-
- 插入操作—- insert 与save命令相同
db.qtest.insert({
abc:'123',
666:'hahaha'
}
)
- 更新文档——– update和save方法
#update() 方法用于更新已存在的文档
db.test.update({python:'mongo'},{$set:{python:'redis'}})
格式
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。
示例
只更新第一条记录:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
只添加第一条:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
全部添加加进去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
全部更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
只更新第一条记录:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );
- 删除文档 用remove函数,最好在删除之前用find判断条件是否正确
db.test.remove({python:'mongo'})
Removed 4 record(s) in 2ms
- 查询操作,find方法
- or条件
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
)