启动 :sudo service mongod |mongodb start
停止 :sudo service mongod |mongodb stop
重启 :sudo service mongod |mongodb restart
设置配置文件
mongod.conf
可以设置数据的存储路径 | 设置log日志的存储路径 | 设置端口号
设置IP | 开启权限
启动mongo客户端 : mongo
net start mongo : windows
关于数据库的基本命令
查看当前数据库 : db
查看所有数据库 :show dbs
创建集合 :
db.createCollection(name, options) 要切换到数据库下才能创建集合
(name是要创建的集合的名称,options是一个文档)
eg:非固定大小的集合 : db.createCollection('info')
固定大小的集合 : db.createCollection('info', {capped:True,
size:10, (指定集合的大小)(优先级更高)
(集合存满时,新数据会覆盖之前的数据) max: (可选)指定固定集合中包含文档的最大数量})
删除数据库 :db.dropDatabase() (切换到数据库才能删除)
使用数据库 :use dbname
查看当前数据库信息 :db.stats
查看集合 :show collections
删除集合 :db.集合名称.drop()
增删改查
插入文档
(插入文档时,如果不指定_id参数,MongoDB会为文档分配一个唯一的ObjectId,是主键,也是索引)
db.集合名称.insert(document)
单条插入:
db.stu.insert(
{
_id:'20201226',
name:'xxxx',gender:1
}
)
多条插入:
db.stu.insert(
[
{name:'王明',gender:1},
{name:'王玲玲',gender:0}
]
)
更新数据
全文档更新(一个新文档替换之前的文档,ID不变)
db.集合名称.update(
{name:'zhangsan'}, 查询条件
{name:'lisi',class:'1712B'} 新的文档
{ upsert : 默认情况下为false,要更新的文档不存在,不会插入一条新的数据,
multi : 默认为false, 只更新查找到的第一条,为True表示更新所有
}
)
局部更新
db.stu.update(
{name:'zhangsan'}, 查找条件
{
$set:{name:'lisi'} { upsert : 默认情况下为false,要更新的文档不存在,不会插入一条新的数据,
multi : 默认为false, 只更新查找到的第一条,为True表示更新所有
}
}
)
更新多条
db.stu.update(
{name:'李自成'},
{
$set:{gender:0}
},
{multi:true}
)
save()会根据_id进行查找,如果文档的_id已经存在则修改,如果文档的_id不存在则添加
eg: db.集合名称.save(
{
_id:'20180820101010',
'name':'zhangsan'
}
)
格式化输出
db.集合名称.find().pretty()
删除数据库
db.dropDatabase(数据库名)
删除数据(多条)
db.集合名称.remove(
{'key':'value'} 条件
)
删除单条
db.集合名称.remove(
{'key':'value'}, 条件
1 (不表示数量,表示的是True(False))
)
列出集合内所有信息
db.集合名称.find()
查询全部
db.集合名称.find(
{age:20,gender:1}
)
查询一条
db.集合名称.findOne(
{age:20,gender:1}
)
比较运算符
等于
小于 lte
大于 gte
不等于 $ne
eg: db.集合.find(
{'time':{$gt:100},
{'actor':'李连杰'}
} )
逻辑或 $or
db.集合.find(
{
gt:100}},
{actor:'李连杰'}
]
} )
逻辑或$or和and一起使用
db.集合.find(
{
gte:18}},
{gender:1}
],
name:'gj'
}
)
范围运算符
$in:在..范围 $nin:不在...范围
db.movie.find(
{
times:{$in:[100,120]}
}
)
使用正则查询
db.集合名称.find(
{
'key':/^正则表达式/
}
)
db.集合名称.find(
{
'key':{$regex:'正则表达式'}
}
)
$type:只返回符合数据类型的文档
db.集合名称.find(
{
'key':{$type:'数据类型'}
}
)
limit:限制返回
skip:跳过指点的条数
db.集合名称.find().limit(num).skip(num)
注意:limit和skip先后顺序不影响结果
sort:进行排序 1:升序 -1:降序
db.集合名称.find().sort({'key':方向(1 or -1),'key2':方向(1 or -1)})
distinct:实现去重
db.集合名称.distinct(
'去重字段',
{'条件'}
)
project(投影):可以选择查询结果中,数据的展示和隐藏
0表示隐藏,1显示
db.集合名称.find(
{'条件'},
{'key':1}
)
假如再设置要显示的字段时,第一个字段设置为1,只展示这一个其他都不展示,反之,只隐藏当前设置的字段,其他的字段都会展示粗来
count:统计文档的个数
db.集合名称.count(
{条件}
)
db.集合名称.find({条件}).count()
mongodb中的聚合操作,主要是处理数据(求和,平均值),
将处理后的数据返回
"""
$group:将集合中的文档分组,可用于统计结果。
$project:修改输入文档的结构。可以用来重命名、增加或
删除域,也可以用于创建计算结果以及嵌套文档。
match使
用MongoDB的标准查询操作。
$limit:用来限制MongoDB聚合管道返回的文档数。
$skip:在聚合管道中跳过指定数量的文档,并返回余下的文
档。
$unwind:将文档中的某一个数组类型字段拆分成多条,每条
包含数组中的一个值。
$sort:将输入文档排序后输出。
"""
创建超级管理用户
use admin
db.createUser(
{ user:'admin',
pwd:'123',
roles:[{role:'root',db:'admin'}]
}
)
修改普通用户权限或密码
修改用户:可以修改pwd、roles属性
注意这里只有超级管理员才有权限修改普通用户的密码和管理权限
修改用户密码(切换到有权限操作的数据库下)
db.updateUser(‘ljh',{pwd:'456'})
添加用户权限(切换到有权限操作的数据库下)
db.grantRolesToUser('username',[{role:'',db:''}])
移除用户权限(切换到有权限操作的数据库下)
db.revokeRolesFromUser('username',[{role:'',db:''}])
删除用户(方式一)(切换到有权限操作的数据库下)
db.dropUser('username')
删除用户 (方式二)
use admin db.system.users.remove({user:'username'})
MongoDB备份
在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。
mongodump -h dbhost -d dbname -o dbdirectory
-h: MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-d: 需要备份的数据库实例,例如:test
-o: 备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。
如果没有开启权限
mongodump -h 127.0.0.1:27017 -d 数据库名称 -o ~/Desktop/数据库备份的路径
mongodump -h 127.0.0.1:27017 -o ~/Desktop/数据库备份的路径
如果开启了权限设置(使用超级管理员权限)我们也可以使用账号密码的方式备份指定用户的数据库
- 设置了超级管理员也可以使用如下方法备份
mongodump -u username -p password --authenticationDatabase 'admin' -d dbname -o dbpath
恢复备份
mongodb使用 mongorestore 命令来恢复备份的数据。
mongorestore -h hostname:port -d dbname --dir path
-h (host): MongoDB所在服务器地址,默认为: localhost:27017
-d (db): 需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
--dir: 指定备份的目录
如果没有开启权限
mongorestore -h 127.0.0.1:27017 -d 数据库名称 --dir 数据库备份文件路径
mongorestore -h 127.0.0.1 -dir 数据库备份文件路径
下面是添加了管理员权限之后的备份命令
如果开启了权限设置(使用超级管理员权限)
mongorestore -u username -p password --authenticationDatabase 'admin' -d 数据库名称 --dir 数据库备份文件路径
MongoDB数据导入与导出
导出工具:mongoexport
mongoexport -d dbname -c collectionname -o file --type json/csv -f field
参数说明:
d :数据库名
c :collection名
o :输出的文件名
-type : 输出的格式,默认为json
f :输出的字段,如果-type为csv,则需要加上-f "字段名"
示例:
导出json
mongoexport -d class1804 -c books -o ~/桌面/dump/books.json --type json
导出csv
mongoexport -d class1804 -c books -o ~/桌面/dump/books.csv --type csv -f 'by_user,likes'
数据导入:mongoimport
mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv
参数说明:
d:数据库名
c:collection名
-type:导入的格式默认json
f:导入的字段名
-headerline:如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
-file:要导入的文件
示例:
导入json
mongoimport -d class1712B -c books --file ~/桌面/dump/books --type json
导入csv
mongoimport -d class1712B -c info --file ~/桌面/dump/books --headerline --type csv
`