MonggoDB
简介
- MonggoDB是一个分布式文档存储数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。
- 是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库中最像关系型数据库的一种。是功能最丰富的非关系型数据库。
安装和测试
-
安装:一键next安装。
-
将安装目录安装到系统环境变量PATH下;
-
创建目录:
c:\data\db ##存放数据 c:\data\log ##存放目志
-
-
启动连接:
- 启动服务:
mongod --dbpath c:\data\db
- 客户端连接:
mongo
,需要从新再打开一个cmd;默认地址:127.0.0.1:17017
- 将MongoDB 添加到windows系统服务,需要以管理员身份运行终端。
- 添加服务:
mongod --dbpath "C:\data\db" --logpath "C:\data\log\MongoDB.log" --install --serviceName "MongoDB"
- 移除服务:
mongod --dbpath "C:\data\db" --logpath "C:\data\log\MongoDB.log" --remove--serviceName "MongoDB"
- 服务控制:
net start|stop MongoDB
- 添加服务:
- 启动服务:
MySQL 和 MongoDB对比
-
相关概念
MySQL MongoDB database(数据库) db(数据库) table(数据表) collection(集合) row(行) document(文档) column(列) field(域/字段)
DB操作
命令 | 说明 |
---|---|
show dbs | 查看所有的库(如果数据库中没有数据,则不会显示) |
db或db.getName() | 查看当前库 |
use database | 创建并切换数据库(使用的数据库不存在直接创建,在的直接切换) |
db.dropDatabase() | 删除数据库 |
help | 帮助 |
exit或quit() | 退出 |
collection操作
命令 | 说明 |
---|---|
show collections | 查看当前数据库下面所有集合 |
db.createCollections | 创建一个空的集合 |
db.createCollection(“goods”) | 创建goods集合 |
db.stu.insert({‘name’:‘shuorui’,age:18}) | 按需创建 |
db.stu.drop() | 删除选定的集合 |
document操作
命令 | 说明 |
---|---|
db.user.insert({name:‘jiwei’,age:21,height:175,isDelete:0}) | 增加一条数据 |
db.user.insert([{},{},{}]) | 插入多条数据(每一个{}代表插入一条数据) |
db.user.find() | 查看所有数据 |
db.user.save({name:‘wenke’,age:40,height:170,isDelete:0}) | save保存的数据没有_id字段插入一条字段 |
-
更新操作:
-
save:
## 保存的数据有__id字段,会修改对应的数据。相当于更新操作 db.user.save({_id:ObjectId("5be3ed63fe40ddb0481718b2"),name:'wenke',age:20,hei ght:178,isDelete:0})
-
update:
db.集合.update(query,{upsert:<boolean>,multi:<boolean>})
说明:query:表示查询条件,update:表示更新设置的内容。( inc:表示增加)
upsert:更新的查新结果不存在,是否作为新数据插入,默认为false multi:符合条件的数据是否全部更新,ture表示全部更新,false表示更新一条。默认为false
db.user.update({age:22},{$set:{age:26}}) ## 更新一条 db.user.update({height:175},{$inc:{height:1}},{multi:true}) ### 会更新所有
-
-
删除文档
-
remove:
db.集合名.remove(query,{justOne:<boolean>})
db.user.remove({height:176}) ## 默认删除所有符合条件的 db.user.remove({isDelete:0}, {justOne:true}) #只会删除符合条件的一条数据
-
delete:删除文档
如删除集合下全部文档: db.user.deleteMany({}) 删除 status 等于 A 的全部文档: db.user.deleteMany({ status : "A" }) 删除 status 等于 D 的一个文档: db.user.deleteOne( { status: "D" } )
-
-
查询文档:
db.user.find()
-
格式:
db.集合.find(query,key1:0/1,key2:0/1 ,keyn:0/1)
-
query:查询条件。
-
第二个参数:要么同时为1,要么同时为0,不能混合
db.user.find({}, {name: 1, age: 1}) // 指定返回的键,不返回其他键 db.user.find({}, {name: 0, age: 0}) // 指定不返回的键,返回其他键
-
-
pretty():
db.col.find().pretty()
格式化显示数据。 -
findOne():
db.user.findOne({isDelete:0})
只返回一条数据
-
查询条件操作符
格式:db.集合.find({key:{$gt:values}})
命令 | 说明 |
---|---|
$gt | 大于 示例:db.user.find({height:{$gt:100}}) |
$gte | 大于等于 |
$lt | 小于 |
$lte | 小于或等于 |
$ne | 不等于 |
$eq | 等于(一般省略不写) |
- 个数统计:count():
db.user.find().count()
- 正则匹配:
db.集合.find({<key>:/正则表达式})
示例:db.user.find({name:/i/})
条件合并(and / or):
-
and条件:
格式: db.col.find({key1:value1, key2:value2}).pretty() 示例: db.user.find({height:{$gt:120,$lt:167}}) ## height>120 and height<167 db.user.find({height:{$gt:120},age:{$gt:6}}) ### height>120 and age>6
-
or条件:
格式: db.集合.find({$or:[{条件1},{条件2}]}) 示例: db.user.find({$or:[{age:{$gt:20}},{grade:{$gt:80}}]})
限制结果集:
- 限制数量:
limit()
- 示例:
db.user.find().limit(2)
- 示例:
- 设置偏移跳过数量:
skip()
- 示例:
db.user.find().skip(2).limit()
- 示例:
- 综合使用:
db.user.find().skip(2).limit(2)
结果集排序
- 排序:
db.user.find().sort({<key>:1/-1})
- key:表示排序的字段
- 1/-1:表示排序规则,1表示升序,-1表示降序
- 示例:
db.user.find().sort({age:-1,height:1})
- 可以指定多个排序字段,前面值一样,按照后面排序字段
索引管理
-
说明:创建索引就是为了提高查询效率,1表示升序,-1表示降序,background表示后台
-
示例:
### 单独创建索引 db.user.createIndex({height:-1},{background:true}) ### 创建组合索引 db.user.createIndex({age:1,height:-1},{background:true})