目录
MongoDB 简述
本文记录MongoDB
和关系型数据库
(Relational database)1的对比学习总结,会 源源不断 地更新。
文章中有错误或不足之处,欢迎留言指正,感谢!
MongoDB是面向文档
(document)2存储的非关系型
数据库,由键值对
构成,文档不需要具有相同的字段、类型和大小
,因此相比关系型数据库更灵活,MongoDB不具备
关系型数据库一些的功能,如JOIN、复杂的多行事务。
基本结构对比
SQL | Mongo | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表 / 集合 |
row | document | 记录行 / 文档 |
column | field | 字段 / 域 |
index | index | 索引 |
table joins | $lookup | 表连接 ,多表查询(3.2新增) |
primary key | primary key | 主键 |
数据库(database)操作
创建数据库
use database_name
数据库不存在时,创建数据库,若存在,则切换到该数据库
show dbs
查看所有数据库
删除数据库
db.dropDatabase()
删除当前数据库,默认删除test
集合(collection)操作
创建集合
db.createCollection(name, options)
name:集合名
options:可选参数,指定内存大小和索引。可省略
后续对options各项参数进行补充说明
show collections
查看所有集合
db.collection.insert({"name": "零否"})
插入文档时,若集合不存在,将会自动创建集合
删除集合
db.collection.drop()
删除成功将返回 true ,否则返回 false
文档(document)操作
MongoDB中,文档为Bson格式,二进制的JSON格式。
以 {}
为整体,填充键值对,逗号分隔;
或以 []
为整体, 填充文档,逗号分隔。
增(insert)
db.collection.insert( document )
db.collection.insertOne( document ) #插入一条文档
db.collection.insertMany( [document 1, document 2,···] ) #插入多条文档
例:
db.collection.insert( { "name": "零否" } )
db.clooection.insertOne( { "name": "零否", "id": 100} )
db.clooection.insertMany( [ { "name": "零否", "id": 100 },
{ "name": "零否2", "id": 200, "age": 18 } ] )
待续···
删(remove)
db.collection.remove( query,
{ justOne: boolean,
writeConcern: document } )
query : 删除文档的条件
justOne : (可选)默认为false,设置为 ture 或 1,表示只删除查询到的第一条文档
writeConcern :(可选)抛出异常的级别
例:
db.collection.remove({"name": "零否"})
改(update)
db.collection.update( query, update,
{ upsert: boolean,
multi: boolean,
writeConcern: document} )
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$
,$set
,$inc
…)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入新文档,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。
例:
- 只更新第一条记录:
db.collection.update( { "name": "零否" }, { $set: { "name": "123" } } )
- 全部更新
db.collection.update( { "count" : { $gt : 3 } } ,
{ $set : { "status" : "OK"} },false,true );
或
db.collection.update( { "count" : { $gt : 3 } } ,
{ $set : { "status" : "OK"} },{ multi : true } );
- 只添加第一条:
db.collection.update( { "count" : { $gt : 4 } } ,
{ $set : { "status" : "OK"} },true,false );
- 全部添加进去:
db.collection.update( { "count" : { $gt : 5 } } ,
{ $set : { "status" : "OK"} },true,true );
"
$inc
“修改器用来增加已有键的值,或者在键不存在时创建一个键。$inc
就是专门来增加(和减少)数字的。”$inc"只能用于整数、长整数或双精度浮点数。要是用在其他类型的数据上就会导致操作失败。
- 全部更新:
db.col.update( { "count" : { $gt : 15 } } ,
{ $inc : { "count" : 1} },false,true );
count值加1
- 只更新第一条记录:
db.col.update( { "count" : { $gt : 10 } } ,
{ $inc : { "count" : -1} },false,false );
count值减1
待续···
查(find)
MongoDB中使用find()方法查询文档
find()
以非结构化方式展示文档
find().pretty()
以结构化方式展示文档
db.collection.find( query, projection )
query3 :可选,使用查询操作符指定查询条件
projection4 :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
下文简单介绍
Mongo
与关系数据库管理系统的类比(RDBMS)
,即Mysql,SQL Server,IBM DB2等等
基本条件查询类比一
操作 | 格式 | Mongo | RDBMS |
---|---|---|---|
1 | () | db.collection.find() | select * from collection |
2 | ({},{key:1}) | db.collection.find({}, {“name”:“零否”} ) | select * from collection where name = “零否” |
3 | ({key1: value}, {key2: 1}) | db.collection.find({“name”:“零否”}, {"id":1} ) | select id from collection where name = “零否” |
{"id":1}
: 值为0时,表示不显示该域(字段),为1时表示显示该域
条件查询类比二(=、!=、>、<、>=、<=)
操作 | 格式 | Mongo | RDBMS |
---|---|---|---|
等于 = | ({key:value}) | db.collection.find({"name":"零否"} ) | select * from collection where name = "零否" |
不等于 != | ({key:{$ne:value}}) | db.collection.find({"id":{$ne:10}} ) | select * from collection where id != 10 |
大于 > | ({key:{$gt:value}}) | db.collection.find({"id":{$gt:10}} ) | select * from collection where id > 10 |
小于 < | ({key:{$lt:value}}) | db.collection.find({"id":{$lt:10}} ) | select * from collection where id <10 |
大于等于>= | ({key:{$gte:value}})) | db.collection.find({"id":{$gte:10}} ) | select * from collection where id >= 10 |
小于等于<= | ({key:{$lte:value}}) | db.collection.find({"id":{$lte:10}} ) | select * from collection where id <= 10 |
条件查询类比三(and、or)
操作 | 格式 | Mongo | RDBMS |
---|---|---|---|
and | ({key1:value1, key2:value2}) | db.collection.find({"name":"零否", "id":"0607"} ) | select * from collection where name = "零否" AND id = "0607" |
~~~~~~ | ({$and:[{key1:value}, {key2:value}]}) | db.collection.find({$and:[{"name":"零否"}, {"id":"0607"}]} ) | select * from collection where name = "零否" AND id = "0607" |
👆鸡肋 | 👆鸡肋👆 | 👆鸡肋👆 | 鸡肋👆 |
or | ({$or:[{key1:value}, {key2:value}]}) | db.collection.find({$or:[{"name":"零否"},{"id":"0607"}]} ) | select * from collection where name = "零否" OR id = "0607" |
👆好用 | 👆好用👆 | 👆 好用👆 | 好用👆 |
and和or混合使用
db.collection.find(
{"number": {$lte:100}, $or:[{"name":"零否"}, {"id":"0607"}]}
)
等同于
select * from collection
where number <= 100 OR name = "零否" AND id = "0607"