MongoDB基础部分
MongoDB 是一个基于分布式文件存储的数据库。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
MongoDB创建数据库
格式: use DATABASE_NAME
PS:MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。
在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
删除操作
删除数据库:db.dropDatabase()
(需切换到当前数据库)
删除集合:db.[collection_name].drop()
创建集合
db.creatCollection(name,options)
·name:要创建的集合名称
·options:可选参数,指定有关内存大小及索引的选项
查看已有集合:show collections
在MongoDB中,可以不用创建集合,在插入文档时,若所插入的集合不存在,则会自动创建该集合。
插入文档
文档的数据结构和JSON基本一样,所有存储在集合中的数据都是BSON格式
语法:db.COLLECTION_NAME.insert(document)
注:document参数也可以是一个(key-value)变量
实例:
db.col.insert({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100 })
查看已插入的文档:db.col.find()
方法二:
格式:db.col.save(document)
若不指定_id字段,save()方法类似于insert()方法,如果指定_id字段,则会更新该_id的数据。
3.2版本更新后新增插入文档语法:
1、db.collection.insertOne():向指定集合中插入一条文档数据
2、db.collection.insertMany():向指定集合中插入多条文档数据
MongoDB更新文档
MongoDB使用update()和save()方法更新集合中的文档
update():用于更新已存在的文档
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,就把按条件查出来多条记录全部更新
writeConcen:可选,抛出异常的级别
save()方法:通过传入的文档来替换已有文档。
db.collection.save(
<document>,
{
writeConcern: <document>
}
)
document:文档数据
writeConcern:可选,抛出异常级别
//注意_id的值要相同
MongoDB删除文档
MongoDB中使用remove()函数来移除集合中的数据(最好在使用remove前先执行find函数来判断执行的条件是否正确)
语法:
db.collection.remove(
<query>,
<justOne>
)
qurey:可选,删除的文档的条件
justOne:可选,如果设为tue或1,则只删除一个文档,如果不设置该参数,或使用默认值false,则删除所有匹配条件的文档。
writeConcern:可选,抛出异常的级别
官方最新文档删除操作的方法(推荐):deleteOne() 和 deleteMany()
删除集合下全部文档:
db.inventory.deleteMany({})
删除 status 等于 A 的全部文档:
db.inventory.deleteMany({ status : "A" })
删除 status 等于 D 的一个文档:
db.inventory.deleteOne( { status: "D" } )
MongoDB查询文档
MongoDB查询文档使用find()方法,find()方法以非结构化的方式来显示所有文档
语法:
db.collection.find(query,projection)
query:可选,使用查询操作符指定查询条件
projection:可选,使用投影操作符指定返回的键。查询时返回文档中所有键值,只需省略该参数即可(默认省略)
如果需要以易读的方式来读取数据,可以使用pretty()方法,语法格式如下:
db.collection.find().pretty()
pretty()方法以格式化的方式来显示所有文档
findOne(),只返回一个文档
查询的条件语句
操作 | 格式 | 范例 | sql中的类似语句 |
---|---|---|---|
等于 | {<key>:<value>} | db.col.find({“by”:“菜鸟教程”}).pretty() | where by = ‘菜鸟教程’ |
小于 | {<key>:{$lt:<value>}} | db.col.find({“likes”:{$lt:50}}).pretty() | where likes < 50 |
小于或等于 | {<key>:{$lte:<value>}} | db.col.find({“likes”:{$lte:50}}).pretty() | where likes <= 50 |
大于 | {<key>:{$gt:<value>}} | db.col.find({“likes”:{$gt:50}}).pretty() | where likes > 50 |
大于或等于 | {<key>:{$gte:<value>}} | db.col.find({“likes”:{$gte:50}}).pretty() | where likes >= 50 |
不等于 | {<key>:{$ne:<value>}} | db.col.find({“likes”:{$ne:50}}).pretty() | where likes != 50 |
MongoDB AND条件
MongoDB的find()方法可以传入多个键(key),每个键以逗号隔开
db.col.find({key1:value1, key2:value2}).pretty()
MongoDB OR条件
MongoDB OR条件语句使用了关键字$or,语法格式如下
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
MongoDB条件操作符
条件操作符用于比较两个表达式并从MongoDB集合中获取数据
MongoDB中条件操作符有:
(>)大于 - $gt-----------greater than
(<)小于 - $lt------------less than
(>=)大于等于 - $gte----------gt equal
(<=)小于等于 - $lte-----------lt equal
(!=)不等于 - $ne--------------not equal
(=)等于 - $eq------------------equal
实例:获取“col”集合中“likes”大于100的数据
db.col.find({likes : {$gt : 100}})
MongoDB $type 操作符
$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
※MongoDB中的类型
类型 | 数字 | 备注 |
---|---|---|
Double | 1 | |
String | 2 | |
Object | 3 | |
Array | 4 | |
Binary data | 5 | |
Undefined | 6 | 已废弃 |
Object id | 7 | |
Boolean | 8 | |
Date | 9 | |
Null | 10 | |
Regular Expression | 11 | |
JavaScript | 13 | |
Symbol | 14 | |
JavaScript(with scope) | 15 | |
32-bit integer | 16 | |
Timestamp | 17 | |
64-bit integer | 18 | |
Min key | 255 | Qurey with -1 |
Max key | 127 |
实例:如果想获取“col”集合汇总title为String的数据
db.col.find({"title" : {$type : 2}})
或
db.col.find({"title" : {$type : 'string'}})
MongoDB Limit与Skip方法
MongoDB Limit()方法
从MongoDB中读取指定数量的数据记录,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
语法:limit()方法基本语法如下
db.COLLECTION_NAME.find().limit(NUMBER)
MongoDB Skip()方法
使用skip()方法跳过指定数量的数据,skip方法接受一个数字参数,作为跳过的记录数
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
MongoDB排序
在MongoDB中使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用1和-1来指定排序的方式(1为升序,-1为降序)
db.COLLECTION_NAME.find().sort({KEY:1})
key:按照指定的键值作为排序的依据
MongoDB索引
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构
createIndex()方法:
db.collection.createIndex(keys, options)
key:要创建的索引字段(1为指定按升序创建索引,降序为-1)
实例:db.col.createIndex({"title":1})
可以设置使用多个字段创建索引
1、查看集合索引:db.col.getIndexes()
2、查看集合索引大小:db.col.totalIndexSize()
3、删除集合所有索引:db.col.dropIndexes()
4、删除集合指定索引:db.col.dropIndex(“索引名称”)
MongoDB聚合
MongoDB中聚合主要用于处理数据(如统计平均值,求和等),并返回计算后的数据结果,使用 aggregate() 方法。
aggregate()方法:db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
MongoDB复制(副本集)
MongoDB复制是将数据同步在多个服务器的过程
MongoDB分片
…
MongoDB备份与恢复
备份:使用mongodump命令。该命令可以导出所有数据到指定目录中。
mongodump -h dbhost -d dbname -o dbdirectory
-h:MongoDB所在服务器地址
-d:需要备份的数据库实例
-o:备份的数据存放位置
恢复:使用mongorestore命令
mongorestore -h <hostname><:port> -d dbname <path>
--host <:port>, -h <:port>:MongoDB所在服务器地址,默认为: localhost:27017
--db , -d :需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
--drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!
<path>:mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。你不能同时指定 <path> 和 --dir 选项,--dir也可以设置备份目录。
--dir:指定备份的目录你不能同时指定 <path> 和 --dir 选项。