mongoDB的简单使用

一、 MongoDB数据库使用注意事项:

1. MongoDB数据库的命令:如果是单个单词组成,则默认小写;如果有多个单词组成,则第一个单词首字母小写,后面的单词首字母大写。 如:db.dropDatabase()   小驼峰命名法

2. MongoDB数据库的命令参数:基本都是以 字典键值对形式传递。

3. 一个MongoDB里可以有多个 数据库(db),一个数据库里可以有多个 集合(collection),一个集合里可以有多个 文档(document),每个文档数据都是由 字典键值对 形式保存。

4. MongoDB里的数据库不需要单独创建,通过 use 切换即可使用。如果数据库里没有数据,数据库不会创建;当数据库里有数据时,数据库才会被创建。

5. MongoDB不需要事先创建 数据库、集合、字段,只要向 集合 中插入一条 文档数据,则集合和数据库默认创建。

二、mongoDB可以分两种方式启动

1.sudo mongod(普通模式开启服务器)

2.sudo mongod --auth (认证模式开启服务器)

在认证模式下:

1.如果是第一次进入,是默认用户是root用户admin,必须要创建一个新的root用户才可以执行

use admin
# 创建用户名,密码,并制定权限
db.createUser({"user" : "username", "pwd" : "password", roles : ["root"]})

2.如果用户已经存在,必须先切换用户,才能执行

权限有[root, readWrite,read]

user admin
# 登录之前创建的用户
db.auth("username","password")
# 可以继续创建新用户,并制定不同权限
db.createUser({"user" : "hello", "hellopwd" : "123456", "roles" : ["db" : "test", "role" : "readWrite]})
db.createUser({"user" : "world", "worldpwd" : "123456", "roles" : ["db" : "test", "role" : "read]})

show users 可以查看已有的账户,创建好新用户时,可以通过db.auth("username","pwd")切换用户

删除用户:

db.dropUser("username")

在与Python的交互中

1.保证是sudo mongod --auth 验证模式开启的mongod服务

2.连接到mongoDB数据库后,先切换到admin数据库

admin = client.admin

admin.authenticate("username","password")

然后就可以进行正常的增删改查操作了

三、MongoDB数据库,集合的基本操作

1.查看当前所在的数据库      db

2.查看mongoDB中所有的数据库      show dbs

3.切换到指定的数据库      use  hello(没有自动创建)

4.查看当前数据库下的所有集合    show collections

5.查看指定集合hello的所有数据    db.hello.find()

6.删除当前所在数据库      db.dropDatabase()

四、MongoDB集合的基本使用

1.在当前数据库下创建集合  db.createCollection('hello')     直接使用系统也会创建

2.查看当前数据库下所有集合   show collections

3.删除当前数据库下的指定集合hello         db.hello.drop()

五、MongoDB文档的增删改查

1.增加数据

1> 每次写入,添加文档数据

db.hello.insert({_id : 1, name : "haha" , age : 18})

2> 创建data空文档,再添加文档数据

data = {}

data._id = 2

data.name = "xixi"

data.age = 20

db.hello.insert(data)

2.删除数据

remove({_id : 1,  {justOne : true}})

第一个参数:表示查询条件,默认情况下所有符合条件的文档数据全部删除

第二个参数:默认justOne为flase,表示全部删除,手动修改为true表示只删除第一条符合匹配的文档

3.修改数据

1>将制定文档数据,全部替换修改

db.hello.update({name : "haha"}, {age : "20"})

结果{_id : 1, name : "haha" , age : 18} -- > {age :"20" }

2>如果只想修改指定的字段,需要用$set来指定

db.hello.update({name : "xixi"} , {$set {age : 30}})

这样就能保证值修改age字段,其他字段的值保持不变了

3>save()   --》(insert + update)

save()方法是基本_id来匹配的

如果_id不存在,则相当于 insert()

如果_id存在,则相当于update()

4.查询数据

find()  查找所有符合匹配的文档结果

findOne()  查找第一个符合匹配的文档结果

find().pretty()   查找所有符合匹配的文档结果,并格式化显示

1>数值判断运算符

db.hello.find({age : 18})  默认是等于

gt : 大于     lt: 小于     gte : 大于等于   lte : 小于等于

例:db.hello.find({age : {$gt : 18}})

2>逻辑判断运算符

$and

可以用:db.hello.find({"age" : 18,"name" : "haha"}

也可以用:db.hello.find($and : [{"age" : 18} , {"name" : "haha"}])

$or

db.hello.find($or : [{"age" : 18 }, {"name" : "haha"} ])

3>范围运算符: $in     $nin(除列表外的所有数据)

db.hello.find("name" : {$in : ["haha", "xixi"]})

db.hello.find("name" : {$nin : ["haha", "xixi"]})

4.支持正则表达式

1>// 包含,但是功能简单

db.hello.find({"name" : /^黄/})  # 查找所有 name值 以 "黄"开头的文档数据

2>$regex 修饰,支持复杂功能.(可以在options里添加参数)

db.stu.find({"name" : {$regex : "^B", $options : "$i"}}) # 表示查找所有name 以 b开头(忽略大小写)

5. $where 使用自定义函数执行查询

# where 会迭代集合中的每一条文档,并用 this表示,可以判断文档指定字段内容,返回符合判断结果的文档,最后统一输出。
db.hello.find({$where : function() {return this.age >= 18}  })

六.对find()结果做处理

1. skip() 和 limit()
skip() 表示跳过指定 多行
limit() 表示显示指定 多行

# 对查询结果先跳过2行,再显示3行
> db.stu.find().skip(2).limit(3)

注意:skip() 和 limit() 方法使用顺序不影响结果

2. 投影 (当find() 使用第二个参数,则启用投影)
只显示查询结果的指定字段

# 只显示 name 和 _id(默认就显示),其他则不显示
db.stu.find({}, {name : 1})

# 不显示 name,其他默认都显示
db.stu.find({}, {name : 0})

_id 默认一定会显示,除非手动指定为 0 不显示
db.stu.find({}, {name : 1, _id : 0})

注意:投影显示时, 0 和 1 不能混用,但是 _id 比较特殊,可以单独指定为 0
可以用 用 true 或者 false 表示 1 或者 0

3. sort() 排序处理 (一般都是按数字排序)

# age : 1对年龄按升序排序
db.stu.find().sort({age : 1})

# age : -1 表示对年龄按降序排序
db.stu.find().sort({age : -1})

# gender : 1 表示对性别按升序排序,gender的值是字符串,则按字符串首字母的ascii值进行排序(少用)
db.stu.find().sort({gender : 1})

# 同时使用多个排序条件:先按第一个排序条件进行排序,如果排序后有相同的字段内容,再按第二个排序条件排序处理。
db.stu.find().sort({age : -1, gender : 1})

4. count() 统计查询结果的文档个数

# 二者相等,结果相同
db.stu.find().count()
db.stu.count()

# 二者相等,结果相同
db.stu.find({age : 18}).count()
db.stu.count({age : 18})


5. distinct() 对指定字段去重显示

# 查看所有 hometown 值的 去重结果,返回一个array
db.stu.distinct("hometown")

# 查看所有age大于等于18的 hometown去重结果
db.stu.distinct("hometown", {age : {$gte : 18}})

七、 aggregate 聚合运算

 支持多个管道处理

# 可以同时支持多个管道处理,前一个管道的输出将做为下一个管道的输入
db.stu.aggregate([ {管道1}, {管道2}, {管道3}])

1. $group 分组管道

 将集合中所有的文档,按指定字段值 进行分组,再对每一组使用统计方法

db.stu.aggregate([ {$group : {_id : "$分组依据字段", 统计结果字段名: {统计方法 : "$统计的字段"}}} ])

2. $match 对所有文档按指定条件进行过滤处理
    (如果只做过滤操作不涉及分组,使用 find() 即可)

一般配合$group使用,先对所有文档进行过滤,再应用分组计算(默认分组是对所有文档进行处理)

3. $project 投影处理(和find的投影类似)

4. $sort() 排序处理(和 sort()方法使用类似)

5. $limit限定显示 和  $skip跳过显示
    (和find()的 limit() 和 skip() 使用方式一致,但是对顺序有明确要求)

6. (了解)$unwind 对数组数据类型的 字段进行拆分,返回拆分后的多条文档

八、MongoDB的索引操作:

# 创建10万条数据的集合
for(i=0;i<100000;i++)  {db.test.insert({name:'test'+i,age:i})}


# 查看查询状态
> db.test.find({age : 1314}).explain("executionStats")
"executionTimeMillis" : 207  表示查询执行的消耗时间,单位是 毫秒

在MongoDB中,_id 是默认的索引,且不可删除。

> db.test.find({_id : 1314}).explain("executionStats")
"executionTimeMillis" : 3  表示查询执行的消耗时间,单位是 毫秒

1. 创建索引 :创建新索引 age
db.test.ensureIndex({age : 1})


2. 查看当前集合中所有的索引
> db.test.getIndexes()


3. 删除索引 : 根据索引名 删除索引
db.test.dropIndex("age_1")

九、MongoDB数据的备份和恢复

1. 备份

mongodump -h 需要备份的主机IP -d 需要备份的数据库  -o 备份的数据库文件保存的位置
$mongodump -h 192.168.66.64:27017 -d youyuan -o ./mongodata/

2. 恢复
mongorestore -h 需要恢复的主机IP -d 需要恢复的数据库名 --dir 恢复文件的目录位置(指定的到数据库的目录名)
$mongorestore -h 192.168.66.64:27017 -d youyuan --dir ./mongodata/youyuan/

十、在Python中通过账户登录mongodb 操作数据库

import pymongo
# 创建数据库连接
client = pymongo.MongoClient('127.0.0.1', 27017)
# 创建数据库对象
db = client.stu

# 然后用db.集合名就可以进行增删改查操作了,和终端中命令一样

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值