一、MongoDB对比MySQL的优缺点
缺点
l 不支持事务操作
l 占用空间过大
l MongoDB没有如MySQL那样成熟的维护工具
l 无法进行关联表查询,不适用于关系多的数据
l 复杂聚合操作通过mapreduce创建,速度慢
| 模式自由, 自由灵活的文件存储格式带来的数据错误
优点
l 文档结构的存储方式,能够更便捷的获取数据
l 内置GridFS,支持大容量的存储
l 内置Sharding,分片简单
l 海量数据下,性能优越
l 支持自动故障恢复(复制集)
二、常用的命令
mongoDB开机命令
以管理员身份打开cmd,输入net start MongoDB,会提示我们请求的服务已经启动。
1.使用数据库、创建数据库
use 数据库名
若想创建一个数据库必须向数据库中插入一条数据
2.添加数据
db.student.insert({“name”:”xiaoming”});
数据库中不能直接添加数据,只能往集合中插入数据,集合不需要创建只需要用点语法,集合自动创建。
3.删除当前数据库
db.dropDatabase();
4.导入数据
我们不可能一条一条的insert。所以,我们希望用sublime在外部写好数据库的形式,然后导入数据库:
mongoimport --db test --collection restaurants --drop --file primer-dataset.json
-db test 想往哪个数据库里面导入
--collection restaurants 想往哪个集合中导入
--drop 把集合清空
--file primer-dataset.json 哪个文件
这样,我们就能用sublime创建一个json文件,然后用mongoimport命令导入,这样学习数据库非常方便。
5.查找数据find()
若find没有参数将列出这个集合的所有文档。
db.restaurants.find()
精确匹配
db.restaurants.find({"score.shuxue":70})
多个条件
db.restaurants.find({"score.shuxue":70,"sax":"男"})
大于条件
db.student.find({"score.yuwen":{$gt:50}});
6.修改数据:update()
查找名字叫做小明的,把年龄更改为16岁:
db.student.update({"name":"小明"},{$set:{"age":16}});
完整替换,不出现$set关键字了:
db.student.update({"name":"小明"},{"name":"大明","age":16});
7、删除数据:remove()
删除所有符合条件的数据
删除所有年龄为13的数据
db.restaurants.remove( { "age": "13" } )
justOne:true只删除一条符合条件的数据
db.restaurants.remove( { "age": "13" } , { justOne: true } )
8、创建集合
db.createCollection(集合名)
9、删除集合
db.集合名.drop()
10、条件操作符
(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte
判断相等
$ne ----------- not equal !=
$eq -------- equal =
获取年龄大于40的数据
db.col.find({age: {$gt : 40}})
获取年龄小于40的数据
db.col.find({age: {$lt : 40}})
获取年龄大于40小于50的数据
db.col.find({age: {$gt : 40,$lt : 50}})
11、模糊查询
查询 title 包含"教"字的文档:
db.col.find({title:/教/})
查询 title 字段以"教"字开头的文档:
db.col.find({title:/^教/})
查询 titl e字段以"教"字结尾的文档:
db.col.find({title:/教$/})
12、limit方法和skip方法
limit(显示条数)
skip(跳过条数)
以下实例只会显示第二条文档数据
db.col.find({},{"title":1,_id:0}).limit(1).skip(1)
13、排序sort()
sort({排序的字段:number})
number为1时,升序
number为-1时,降序
db.COLLECTION_NAME.find().sort({KEY:1})
skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。
14、索引
创建索引方法 createIndex()
语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。
db.collection.createIndex(keys, options)
db.col.createIndex({"title":1})
1、查看集合索引
db.col.getIndexes()
2、查看集合索引大小
db.col.totalIndexSize()
3、删除集合所有索引
db.col.dropIndexes()
4、删除集合指定索引
db.col.dropIndex(“索引名称”)
15、聚合函数
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
实例
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])